Android - 在进程被杀死时恢复状态

时间:2014-01-14 14:08:59

标签: android android-intent android-activity

我在Android中有片段活动,如果我最小化应用程序,一段时间后系统会终止进程,稍后当我运行应用程序时它会崩溃,因为它试图从第二个活动恢复(与片段),即使该过程已被杀死且它不是发射器活动。 它崩溃的原因是因为在片段中某些视图使用Singleton类中的变量,并且当该进程被终止时,所有这些变量都变为null。 所以我尝试检查托管像这样的片段的父活动

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

}

问题在于,当它尝试恢复活动时,即使我明确声明要启动启动器活动,它仍继续使用第二个活动生命周期方法....如何在启动意图后停止它? / p>

4 个答案:

答案 0 :(得分:0)

使用SharedPreferences为您的单身人士使用Application课程。来自android文档,

  

您可以使用SharedPreferences保存任何原始数据:布尔值,   浮点数,整数,长整数和字符串。此数据将持续跨用户   会话(即使你的申请被杀)。

答案 1 :(得分:0)

尝试在startActivity(i)之后调用finish()

答案 2 :(得分:0)

SecondActivity活动是否在AndroidManifest.xml中具有意图过滤MAIN,如下所示

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
    </intent-filter>

如果确实尝试删除此过滤器。

答案 3 :(得分:0)

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仍在活动堆栈的根目录(即:尚未完成)时,此操作才有效。如果您在finish()启动下一个活动时正在调用SplashScreen,则需要将其删除,以便始终将SplashScreen作为活动堆栈的根。为了防止用户按下BACK并返回SplashScreen,你应该在SplashScreen启动下一个Activity时设置一个布尔标志,在SplashScreen.onResume()中你应该检查这个布尔标志和如果设置了标志,则调用finish()(这将“退出”您的应用程序)。