如果用户手动杀死应用程序,则从其离开的位置恢复活动

时间:2017-02-01 06:24:21

标签: java android android-activity android-lifecycle

我正在开发一个应用程序,其中我从活动A(主要活动)移动到活动B到活动C. 所有这一切都运行正常但是当用户通过从任务托盘中删除它来杀死应用程序时会出现问题。

要理解我的问题,说用户从A移动到B然后C,但在完成活动C中的任务之前,用户杀死了应用程序。 因此,当用户再次通过按下应用程序图标打开应用程序时,我想启动用户在杀死应用程序时的最后一个活动C,而不是启动(主要活动A)Android的新应用程序的默认行为。

我尝试了什么:

1)我尝试使用“onSaveInstanceState”和“onRestoreInstanceState”,但我认为它们在方向改变时使用,或者我们通过按后退按钮返回。

2)我试图将所有内容保存在“onPause”中,因为当活动被破坏时,暂停调用99.99%次,并且通过使用静态标志我打开了最后一个活动,它对我有用,但我想要一些很好的示例或技术来完成这项工作。

所以任何人都可以帮助我实现同样的目标.. ??

我要求其他成员提供代码示例。

提前感谢。

4 个答案:

答案 0 :(得分:5)

将状态存储在每个Activity @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活动,它将成为一个启动器,主要活动:

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));
    }
}

[来源修改]

答案 1 :(得分: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;

   }
}

答案 2 :(得分:0)

当进程即将被杀死时,系统会保存用于启动活动的Intent。一旦用户返回到已被杀死的应用程序,则应用程序将被恢复并具有相同的Intent(活动A)在您的情况下)被激活以启动活动,包括它可能具有的所有额外内容。

转到SharedPrefrences:https://developer.android.com/reference/android/content/SharedPreferences.html 参考官方文件。

答案 3 :(得分:0)

尝试使用sharedPreferences概念,在打开该活动时保存sharedPreferences中的活动名称,然后在重新打开应用程序时检查sharedPreferences值。我想你明白了! 示例教程链接: https://developer.android.com/training/basics/data-storage/shared-preferences.html

相关问题