仅在发布模式下按HOME时将杀死活动

时间:2013-11-05 05:32:20

标签: android android-fragments android-activity

首先,我有两个活动: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文件安装时。安装完成后,手机会询问两个选项:DoneOpen。如果我按open,则会出现此问题。当我通过任务管理器杀死应用程序,然后再次打开,它正常工作。

1 个答案:

答案 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