如何检测我的应用程序何时进入重新创建阶段

时间:2019-02-27 13:20:41

标签: android

正如我已经知道的那样,Android中的活动可以经历娱乐阶段,例如https://developer.android.com/reference/android/app/Activity#activity-lifecycle

要在生命周期更改期间保留应用程序的状态,我在活动中使用了onSaveInstanceState()onRestoreInstanceState(),一切正常。

但是,当重新创建应用程序时,我无法正确保存/恢复状态,因为我的应用程序中已经有很多其他活动,不支持保存/还原状态。 我要实现的就是简单地删除所有先前已打开的活动的堆栈,然后从头启动应用程序。

任何人都可以帮助我,如何检测应用程序重新创建事件,因此我可以告诉我的应用程序,它应该不还原任何以前保存的状态?

更新: 本文中描述了相同的问题,但未解决我的问题 https://medium.com/@elye.project/dont-keep-activities-alone-is-not-enough-for-testing-407b7c01bd60

2 个答案:

答案 0 :(得分:0)

唯一的方法如下:

public class BaseActivity extends AppCompatActivity {
    private static boolean isFirstInit = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(isFirstInit) {
            isFirstInit = false;
            if(savedInstanceState != null) {
                // is after process restart
            }
        }
    }
}

但是我认为您应该首先适当地实现状态持久性。

作为用户,我知道一个因为我打开相机并将图像上传到Google相册然后又返回到谷歌而重新启动的应用程序非常烦人。

答案 1 :(得分:-1)

您可以在Application类下使用标志。尽管下面的示例只是维护状态的一种方法。有多种方法,例如在BaseActivity中存储或监听活动状态更改并保存状态。

  

用于维护全局应用程序状态的基类。您可以通过创建一个子类并在AndroidManifest.xml的标签中将该子类的标准名称指定为“ android:name”属性来提供自己的实现。创建应用程序/包的过程时,将在任何其他类之前实例化Application类或Application类的子类。

您可以尝试以下示例并维护标志。因此,无论何时启动应用程序,BaseApp都会成为第一个应用程序。

public class BaseApp extends Application{

private boolean isAppRestarted;

  @Override public void onCreate() {
  super.onCreate();
  isAppRestarted = true;
  }

  public static boolean isAppRestarted() {
  return isAppRestarted;
  }

}

一个人可以访问isAppRestarted状态,并知道它是否已经重新启动。我的意思是重新开始。几秒钟后,您可以使用一些计时器或根据用户活动(将isAppRestarted更改为false)来更改状态。