我在 Android 文档中读到,通过将 Activity 的 launchMode 属性设置为 singleTop 或添加FLAG_ACTIVITY_SINGLE_TOP
标记我的意图,那个召唤startActivity(intent)
将重用单个 Activity 实例并为我提供 IntentonNewIntent
打回来。我做了这两件事,并且onNewIntent
从不火灾并且onCreate
每次都会发生火灾。文档还说this.getIntent()
返回首次创建活动时首次传递给该活动的意图。在onCreate
我正在打电话getIntent
我每次都会得到一个新的(我在另一个活动中创建意图对象并向其添加一个额外的内容......如果它返回给我相同的意图对象,那么每次这个额外的内容都应该是相同的)。所有这些让我相信我的活动并不像“单顶”,我不明白为什么。
为了添加一些背景以防我只是缺少必需的步骤,这里是清单中的活动声明以及我用来启动活动的代码。 Activity 本身并没有做任何值得一提的事情:
在 AndroidManifest.xml 中:
<activity
android:name=".ArtistActivity"
android:label="Artist"
android:launchMode="singleTop">
</activity>
在我的通话活动中:
Intent i = new Intent();
i.putExtra(EXTRA_KEY_ARTIST, id);
i.setClass(this, ArtistActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
你检查过吗onDestroy()
也被叫了?这可能就是为什么onCreate()
每次都会被调用,而不是onNewIntent()
,只有当活动已经存在时才会被调用。
例如,如果您通过“后退”按钮离开活动,默认情况下它会被销毁。但是,如果您在活动堆栈上进入其他活动并从那里调用您的ArtistActivity.class
再次它会跳过onCreate()
并直接前往onNewIntent()
,因为该活动已经创建并且您将其定义为singleTop
Android 不会创建它的新实例,而是采用已经存在的实例。
为了了解发生了什么,我为每个活动的所有不同状态实现了虚拟函数,所以我现在总是知道发生了什么:
@Override
public void onDestroy() {
Log.i(TAG, "onDestroy()");
super.onDestroy();
}
同样适用于onRestart()
, onStart()
, onResume()
, onPause()
, onDestroy()
如果上述(后退按钮)不是您的问题,那么实现这些虚拟对象至少可以帮助您更好地调试它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)