2017-02-01 8 views
0

Я работаю над одним приложением, в котором я перехожу из Activity A (Main Activity) в Activity B в Activity C. Все это работает нормально, но проблема возникает когда пользователь убил приложение, удалив его из панели задач.Возобновление активности с того места, где он был удален, если пользователь вручную удалил приложение

Чтобы понять мою проблему, скажите, что пользователь перешел из A в B, а затем C, но до завершения задачи в действии C пользователь убил приложение. , поэтому, когда пользователь снова открывает приложение, нажав значок приложения, я хочу запустить последнее действие C, где был пользователь, когда он убил приложение, а не по умолчанию для запуска Android (основная активность A) новый экземпляр приложения.

Что я пробовал:

1) Я попытался с помощью «onSaveInstanceState» и «onRestoreInstanceState», но я думаю, что они используются при изменении ориентации или мы идем назад, нажав кнопку назад.

2) Я попытался сохранить все в "onPause", поскольку onpause вызывает 99.99% раз, когда активность уничтожена и с помощью статических флагов я открываю последнее действие, и это сработало для меня, но я хочу, чтобы в этом была хорошая работа или техника ,

так может кто-нибудь помочь мне в достижении того же .. ??

Я прошу других членов привести примеры кода.

благодарит заранее.

+1

Попробуйте использовать концепцию sharedPreferences, сохранить имя активности в sharedPreferences при открытии этой деятельности, а затем проверить значение sharedPreferences во время открытия приложения.Я думаю, ты понял! –

+0

Вы на правильном пути. – mallaudin

+0

@ W4R10CK спасибо за ваш ans, ваш подход правильный, но, как я уже упоминал, я уже пробовал это, и он работает нормально. , так что не возражаете, но я ищу некоторые улучшения работы, и мои вопросы, если кто-нибудь может предложить некоторый лучший подход к проблеме. –

ответ

0

Намерение, которое было использовано для запуска активности, сохраняется системой, когда процесс вот-вот будет убит. Когда пользователь вернется в приложение, которое было убито, приложение будет восстановлено и будет выполнено такое же намерение (активность A в вашем случае) уволен, чтобы запустить мероприятие, включая все дополнительные функции, которые он может иметь.

Идём в SharedPrefrences: https://developer.android.com/reference/android/content/SharedPreferences.html см. Официальную документацию.

+0

Я думаю, это верно только тогда, когда ** system ** убивает приложение. т. е. когда ресурсы ограничены. – mallaudin

+0

Да, но в этом вопросе говорится: «Все это работает нормально, но проблема возникает, когда пользователь убил приложение, удалив его из панели задач». Его аналогично ручному убийству его из TaskTray. – Akshay

1

вы можете использовать SharedPreferences для хранения последнего состояния пользователя. @ OnPause активность

SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit(); 
editor.putString("state", "A/B/C"); 
editor.commit(); 

OnResume активность

SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String stateApp = prefs.getString("state", null); 

if (stateApp != null) { 
    switc(stateApp){ 
     case 'A': 
     // Go TO A activity 
     break; 

     case 'B': 
     // Go TO B activity 
     break; 
     default: 
     // Go TO C activity 
     break; 

    } 
} 
5

магазин состояние в каждом Activity «s @onPause().

Таким образом, в каждом Activity вы хотите:

@Override 
protected void onPause() { 
    super.onPause(); 

    SharedPreferences prefs = getSharedPreferences("RESTART", MODE_PRIVATE); 
    Editor editor = prefs.edit(); 
    editor.putString("last_left", getClass().getName()); 
    editor.commit(); 
} 

И Shell активность, которая будет Launcher, Основная деятельность:

public class Shell extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Class<?> classActivity; 

     try { 
      SharedPreferences prefs = getSharedPreferences("RESTART", MODE_PRIVATE); 
      classActivity = Class.forName(prefs.getString("last_left", getClass.getName())); 
     } 
     catch(ClassNotFoundException ex) { 
      classActivity = your_Activity1.class; 
     } 

     startActivity(new Intent(this, classActivity)); 
    } 
} 

[Источник Modified]

+1

это хорошее решение, но он также хочет сохранить состояние. поэтому я думаю, что в onResume вы можете сохранить последнюю активность, как в своем решении, и сохранить состояние в onPause и восстановить, если доступно. – savepopulation

0

Попробуйте использовать sharedPreferences концепции, сохранить имя активности в sharedPreferences во время открытия этого действия, а затем проверить значение sharedPreferences при повторном открытии приложения ication. Я думаю, ты понял! образца ссылка учебника: https://developer.android.com/training/basics/data-storage/shared-preferences.html