我遇到了一个有趣的问题,即使在清单文件中将Activity定义为singleTask或singleInstance,它仍然会被创建多次。以下是如何重现此问题。假设在主Activity中:
@Override
protected void onResume() {
Intent i = new Intent(MainActivity.class, SingleActivity.class);
startActivity(i);
}
在我的SingleActivity中,我有:
@Override
protected void onCreate(Bundle savedInstanceState) {
...
Log.i("SingleActivity", "onCreate " + System.identityHashCode(this));
...
}
在清单文件中,我有以下内容:
<activity android:name=".SingleActivity"
android:launchMode="singleInstance"
/>
现在,如果我启动应用程序,一切似乎都很正常,只有一个问题:如果我在
SingleActivity
在前台时按下“返回”按钮,它会导航回到MainActivity
,其中MainActivity.onResume()
将创建另一个SingleActivity
实例,而不是将已经存在的实例带到前面。这是我知道的,因为日志显示了不同的标识哈希码。
如果启动模式为singleTask,则情况相同。
唯一的解决方法似乎是重写onBackPressed()
,但这似乎是一个丑陋的解决方案。
我想知道我做错了什么。