按home /任务切换器后,Android app子活动未恢复

时间:2015-10-21 21:58:27

标签: android

我有一个主要活动,当按下按钮时会创建一个子活动。

如果我在显示子活动时按下任务管理器或主页按钮,子活动就会被销毁,我得到onSaveInstanceState然后调用onDestroy(对于孩子)。

当我切换回我的应用程序时,用户将返回到根活动,并且不会恢复子项。我收到的唯一通知是onResume的主要活动。

我已尝试在root活动中设置alwaysRetainTaskState标志,但没有帮助。

任何人都可以提供任何建议吗?

<application
    android:name=".Application"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar"
        android:alwaysRetainTaskState="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".GameActivity"
        android:label="@string/app_name"
        android:noHistory="true">
        <!--android:theme="@style/AppDialogTheme"-->
    </activity>
</application>

public void onClickStart(View v) {
    ((Application) getApplication()).resetCurrentScore();
    ((Application) getApplication()).resetCurrentLevel();
    ((Application) getApplication()).resetLives();

    Integer level = ((Application) getApplication()).getCurrentLevel();

    if (level <= 3) {
        Intent GameActivity = new Intent(getApplicationContext(), GameActivity.class);
        startActivity(GameActivity);
    }
    else {
        Intent SpellGameActivity = new Intent(getApplicationContext(), SpellGameActivity.class);
        startActivity(SpellGameActivity);
    }
}

1 个答案:

答案 0 :(得分:1)

可能导致此问题的是您的GameActivity块中的android:noHistory属性。这会导致Activity没有留下任何堆栈跟踪,并且当它离开用户的视图时会在其上调用finish(),这就是调用onDestroy()的原因以及为什么活动被销毁

来自文档:

  

机器人:noHistory

     

是否应从活动堆栈中删除活动   并在用户导航时完成(调用其finish()方法)   从它开始,它在屏幕上不再可见 - &#34; true&#34;如果它应该   完了,&#34;假&#34;如果不。默认值为&#34; false&#34;。价值   &#34;真&#34;意味着活动不会留下历史痕迹。它   将不会保留在任务的活动堆栈中,因此用户将会   不能回到它。在这种情况下,onActivityResult()永远不会   如果您为此活动的结果启动另一项活动,则会调用。