![](/img/trans.png)
[英]How to stop android from restoring state when the app process is killed?
[英]Android - restoring state when process has been killed
我在Android中進行了帶有片段的活動,如果我最小化應用程序,並且一段時間后系統終止了該進程,則稍后運行我的應用程序時會崩潰,因為它試圖從第二個活動(包含片段的活動)中恢復,即使該進程已被終止,也不是啟動程序活動。 它崩潰的原因是,在片段中某些視圖使用了Singleton類中的變量,並且當進程被殺死時,所有這些變量都變為空。 因此,我嘗試檢查承載此類片段的父活動
public class SecondActivity extends FragmentActivity {
FragmentTabsAdapter tabsAdapter;
ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("Crash", "Second Activity");
if (Commons.INST.someVariableFromTheSingleton == null) {
Intent i = new Intent(this, SplashScreen.class);
// Splash screen is the launcher activity
startActivity(i);
} else {
setContentView(R.layout.activity_second);
tabsAdapter = new FragmentTabsAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(tabsAdapter);
}
}
}
問題是,即使我明確聲明要啟動啟動器活動,當它嘗試還原活動時,它仍將繼續使用第二個活動生命周期方法。...一旦啟動了意圖,如何停止它?
考慮將Singled的Application類與SharedPreferences一起使用。 從android文檔中
您可以使用SharedPreferences保存任何原始數據:布爾值,浮點數,整數,長型和字符串。 這些數據將在用戶會話之間保持不變(即使您的應用程序被終止)。
嘗試在startActivity(i)之后調用finish()
SecondActivity活動在AndroidManifest.xml中是否具有意圖過濾器MAIN,如下所示
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
如果確實嘗試刪除此過濾器。
在onCreate()
您想這樣做:
Intent i = new Intent(this, SplashScreen.class);
// Splash screen is the launcher activity
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
return;
僅當SplashScreen
仍位於活動堆棧的根目錄(即:尚未完成)時,此選項才有效。 如果當前正在啟動下一個Activity時在SplashScreen
調用finish()
,則需要將其刪除,以便始終將SplashScreen
作為Activity堆棧的根。 為了防止用戶按BACK返回到SplashScreen
您應該在SplashScreen
啟動下一個Activity時在SplashScreen
設置一個布爾標志,而在SplashScreen.onResume()
則應檢查此布爾標志,如果該標志是,請調用finish()
設置(然后將“退出”您的應用程序)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.