当前位置: 首页 > 面试题库 >

Android“单顶”启动模式和onNewIntent方法

孙永思
2023-03-14
问题内容

我在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(),因为该活动已经创建,并且由于您将其定义为singleTopAndroid不会创建该活动的新实例,但以已经在附近的那个为准。

我要做什么,我会为每个活动的所有不同状态实现虚拟功能,所以现在我总是在做什么:

@Override
public void onDestroy() {
    Log.i(TAG, "onDestroy()");
    super.onDestroy();
}

同为 onRestart()onStart()onResume()onPause()onDestroy()

如果上述(返回按钮)不是您的问题,那么实现这些虚拟变量至少可以帮助您更好地进行调试



 类似资料:
  • 本文向大家介绍Android中Activity的四种启动模式和onNewIntent(),包括了Android中Activity的四种启动模式和onNewIntent()的使用技巧和注意事项,需要的朋友参考一下 写在前面 Activity是Android四大组件之一,用于直接跟用户进行交互,本篇文章将介绍Activity的启动流程。用户启动Activity的方式大致有两种:一种是在桌面点击应用程序

  • 我正在浏览单个实例的文档,并尝试了几个示例。在我的一个示例中,我有三个活动:A- 场景: 通过A和B导航到C后(即A- 问题 当从活动A按下后退按钮时,为什么活动B出现在前台? 其他场景: 类似地,从活动C如果用户按下设备主页按钮,并回来的应用程序长按主页,C停留在前台。但是后退按钮按流程需要C-

  • 本文向大家介绍android 启动模式:相关面试题,主要包含被问及android 启动模式:时的应答技巧和注意事项,需要的朋友参考一下 1、standard:标准化启动模式 每启动一个Activity,都会重新创建Activity的新的实例,将其放在栈的顶部。不需要考虑这个实例是否已经存在。 每一次启动,它的onCreate()、onStart()、onResume()方法都会被依次调用。 2、s

  • 本文向大家介绍Android Service启动方式相关面试题,主要包含被问及Android Service启动方式时的应答技巧和注意事项,需要的朋友参考一下 1.startService ①.定义一个类继承service ②.在manifest.xml文件中配置该service ③.使用context的startService(intent)启动该service ④.不再使用时,调用stopSe

  • 本文向大家介绍Android Service的启动方式?相关面试题,主要包含被问及Android Service的启动方式?时的应答技巧和注意事项,需要的朋友参考一下 采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用start

  • 本文向大家介绍Android中activity的启动模式,包括了Android中activity的启动模式的使用技巧和注意事项,需要的朋友参考一下 activity的启动模式一共有四种:standard、singleTop、singleTask和singleInstance,可以在AndroidMannifest.xml中通过给<activity>标签指定android:launchMode属性来