首先,我有两个活动:Splash和MainActivity(仅支持肖像)。在MainActivity中,我有许多片段使用Slide菜单。当用户离开MainActivity时,我想保留当前片段。这是我的尝试:
int currentFragment = 0;
public void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null) {
currentFragment = savedInstanceState.getInt(CURRENT_FRAGMENT_KEY, 0);
switchContent(currentFragment);
} else {
// change fragment by index
switchContent(0);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt(CURRENT_FRAGMENT_KEY, currentFragment);
Log.d("onSaveInstanceState" ," current fragment" + currentFragment);
super.onSaveInstanceState(outState);
}
我的manifest
:
<activity
android:name="com.appiphany.auskills.activity.SplashActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activity.MainActivity"
android:screenOrientation="portrait" />
使用调试键构建应用程序时,一切都很好:按Home键,然后返回应用程序,打开上一个片段。但是当我构建发布模式(使用我的私钥,我不使用proguard
)时,按MainActivity中的HOME按钮,然后再次打开应用程序,从SplashActivity 开始。我不知道这个奇怪的问题。我尝试了这个,但没有帮助:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
currentFragment = savedInstanceState.getInt(CURRENT_FRAGMENT_KEY, 0);
switchContent(currentFragment);
}
有什么想法吗?
更新:我发现了另一个奇怪的问题:这个问题只发生在我从apk文件安装时。安装完成后,手机会询问两个选项:Done
或Open
。如果我按open
,则会出现此问题。当我通过任务管理器杀死应用程序,然后再次打开,它正常工作。
答案 0 :(得分:2)
在从Splash导航到Main活动时,使用FLAG_ACTIVITY_NEW_TASK
修复了问题。我只是想知道为什么它可以在调试模式下工作(从像释放模式的apk重新安装)。以下是我可行的代码,任何人都有同样的问题:
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
finish();
startActivity(intent);
更新:非常感谢David Wasser
,所以正确的答案应该是这样的:
// SplashActivity
if(!isTaskRoot()) {
finish();
return;
}
参考:Re-launch of Activity on Home button, but...only the first time