我在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>
答案 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()
(这将“退出”您的应用程序)。