Android“单顶”启动模式和onNewIntent方法
我在Android文档中读到,通过将Activity的launchMode属性设置为singleTop或通过将FLAG_ACTIVITY_SINGLE_TOP
标志添加到我的Intent,该调用startActivity(intent)
将重用单个Activity实例,并在onNewIntent
回调中为我提供Intent
。我做这两种事情,而且每次都onNewIntent
不会解雇onCreate
。文档还说,它this.getIntent()
返回的是在首次创建活动时首次传递给它的意图。在onCreate
我打电话的时候getIntent
,我每次都会得到一个新的对象(我在另一个活动中创建了一个intent对象,并向其中添加了一个额外的对象…如果每次返回的内容都相同,那么这个额外对象应该相同意向对象)。所有这些使我相信我的活动不像“单顶”那样,而我不
为了增加一些背景信息,以防万一我只是缺少必需的步骤,这是清单中的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不会创建该活动的新实例,但以已经在附近的那个为准。
我要做什么,我会为每个活动的所有不同状态实现虚拟功能,所以现在我总是在做什么:
@Overridepublic void onDestroy() {
Log.i(TAG, "onDestroy()");
super.onDestroy();
}
同为 onRestart()
,onStart()
,onResume()
,onPause()
,onDestroy()
如果上述(返回按钮)不是您的问题,那么实现这些虚拟变量至少可以帮助您更好地进行调试。
以上是 Android“单顶”启动模式和onNewIntent方法 的全部内容, 来源链接: utcz.com/qa/416119.html