正如我已经知道的那样,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
答案 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
)来更改状态。