`
yhz61010
  • 浏览: 562403 次
  • 来自: -
博客专栏
63c13ecc-ef01-31cf-984e-de461c7dfde8
libgdx 游戏开发
浏览量:12269
社区版块
存档分类
最新评论

[原创] Android Activity onNewIntent() 详解

阅读更多
阅读难度:中
阅读前提
1. 需要了解 Android 的生命周期,每个方法的触发时机以及作用。
2. 需要了解 Activity 的 launchMode 模式和作用。
3. Intent 基本知识及作用。

Android Activity 的生命周期如下(图片来自 Android 官网 https://developer.android.com/guide/components/images/activity_lifecycle.png):

也就是说,初次启动 Activity 时,调用顺序如下:
onCreate() -> onStart() -> onResume()

那么,onNewIntent() 是什么时候被触发的呢,它又有什么用呢?
让我们再来看一张图:

上面这张图直观的说明了 onNewIntent() 是什么时候被调用的。而且其中还表明了最重要的一点:onCreate() 和 onNewIntent() 不会被同时调用。

接下来,我们再来看看官网是如何解释 onNewIntent() 的(https://developer.android.com/reference/android/app/Activity.html#onNewIntent(android.content.Intent)):
引用
onNewIntent

added in API level 1
void onNewIntent (Intent intent)
This is called for activities that set launchMode to "singleTop" in their package, or if a client used the FLAG_ACTIVITY_SINGLE_TOP flag when calling startActivity(Intent). In either case, when the activity is re-launched while at the top of the activity stack instead of a new instance of the activity being started, onNewIntent() will be called on the existing instance with the Intent that was used to re-launch it.

An activity will always be paused before receiving a new intent, so you can count on onResume() being called after this method.

Note that getIntent() still returns the original Intent. You can use setIntent(Intent) to update it to this new Intent.

Parameters
intent Intent: The new intent that was started for the activity.

简单说明下:如果在 AndroidManifest.xml 中,将 Activity 的 launchMode 设置成了 "singleTop" 模式,或者在调用 startActivity(Intent) 时,设置了
FLAG_ACTIVITY_SINGLE_TOP 标识,那么,当该 Activity 再次被启动时,如果它依然存在于 Activity 栈中,并且刚好处于栈的最顶层时,那么它将不会被重新创建,而是直接使用原来的实例,此时,onNewIntent(Intent) 将会被调用,后续生命周期中的其它方法,就可以使用 onNewIntent(Intent) 传递过来的新的 Intent 参数了。(也就是说,其它方法可以使用更新后的 Intent 参数)

也就是说,调用顺序如下:
onNewIntent() -> onRestart() -> onStart() -> onResume()

需要特别注意的是, 如果在 onNewIntent(Intent) 中,不调用 setIntent(Intent) 方法对 Intent 进行更新的话,那么之后在调用 getIntent() 方法时得到的依然是最初的值。

在实际编写代码过程中,我们往往需要在 onCreate() 和 onNewIntent() 中进行一些相同的处理,因此可以像下面这样做:
@Override
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_schedule);
     // Do what you want.
     onNewIntent(getIntent());
     // Do others
}
如果你不想直接在 onCreate() 方法中调用 onNewIntent(),那么也可以在 onCreate() 和 onNewIntent() 中同时调用一个自定义方法,也可以达到相同的目的:
@Override
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_schedule);
     // Do what you want.
     sameProcess(getIntent());
     // Do others
}

@Override
protected void onNewIntent(Intent intent) {
     // Do what you want.
     sameProcess(intent);
     // Do others
}

最后总结一下,在启动 Activtiy 时,如果希望在 onCreate() 不被触发的的情况下,依然可以对 Intent 进行操作,这就需要使用 onNewIntent()。

参考文献:
  • 大小: 80.7 KB
  • 大小: 90 KB
0
0
分享到:
评论

相关推荐

    android Activity生命周期详解(图文)

    例如,SingleTop模式下,如果新启动的Activity已经在栈顶,系统不会创建新的实例,而是调用`onNewIntent()`。 总之,深入理解Activity生命周期和其背后的源码逻辑,对于编写高效、响应迅速且用户体验优秀的Android...

    Android onNewIntent()触发机制及注意事项

    在Android应用开发中,`onNewIntent()` 是一个重要的生命周期方法,主要负责处理在Activity已经启动并且处于前台或后台时接收到的新Intent。这个方法在特定的`launchMode`下被调用,例如`singleTask`或`...

    Android中Activity四种启动模式和taskAffinity属性详解-Rong

    在Android应用开发中,Activity是构成用户界面的基本组件,它代表了一个单一的屏幕界面。Activity之间的交互和跳转对于构建流畅的用户体验至关重要。为了管理Activity的生命周期和用户界面的流程,Android系统提供了...

    android onnewintent

    ### Android onNewIntent机制详解 #### 一、`onNewIntent()`方法介绍 在Android开发过程中,`onNewIntent()`方法对于理解应用内部如何处理来自外部或其他组件的意图(Intent)至关重要。此方法允许开发者捕获并响应...

    Android Activity与Intent详解及示例代码

    然后在目标Activity的`onCreate()`或`onNewIntent()`中使用`getExtras()`获取数据: ```java Intent intent = getIntent(); String value = intent.getStringExtra("key"); ``` 在AndroidManifest.xml中,需要为每...

    Android的Activity的Launch模式之Standard案例

    - SingleTop:如果Activity已经在栈顶,系统不会创建新实例,而是调用onNewIntent()方法。 - SingleInstance:Activity及其所有子Activity都在单独的任务栈中,确保只有一个实例。 - SingleTask:Activity及其子...

    Android Activity启动模式之singleTop实例详解

    在Android应用开发中,Activity的启动模式是决定如何创建和管理Activity实例的关键因素。本文将深入探讨`singleTop`启动模式,通过实例分析其功能、用法以及相关的注意事项。 `singleTop`模式是Android Activity四...

    Android LaunchMode详解Demo

    在Android应用开发中,`LaunchMode`是一个至关重要的概念,它决定了Activity如何启动以及与任务栈(Task Stack)之间的交互。本篇文章将深入探讨`LaunchMode`的不同模式及其实际应用场景,通过实例`LaunchModeDemo`...

    Activity配置、启动和关闭activity实例详解

    Activity是Android应用开发中的核心组件之一,用于构建用户界面并管理与用户的交互。在Android系统中,Activity扮演着用户界面窗口的角色,展示内容并响应用户的操作。以下是对Activity配置、启动和关闭的详细讲解。...

    Android NFC开发实战详解

    ### Android NFC开发实战详解 #### 一、NFC技术简介 近场通信(Near Field Communication,简称NFC)是一种短距离无线通信技术,允许电子设备在几厘米的距离内进行数据交换。NFC技术最初由飞利浦公司和诺基亚公司...

    Android Activity生命周期和堆栈管理的详解

    Android Activity生命周期是理解Android应用程序行为的关键,它是每个Android开发者必须掌握的基础知识。Activity作为Android四大组件之一,扮演着用户界面的主要角色,它负责处理用户的交互并显示内容。 1. **生命...

    android面试题

    ### Android四大组件详解:Activity的生命周期与启动模式 在深入探讨Android四大组件之一的Activity之前,我们先简要概述一下Android四大组件的概念。这四大组件包括:Activity(负责UI交互)、Service(执行后台...

    详解Android中Activity的四大启动模式实验简述

    与单任务模式类似,此模式下,如果目标Activity已经在栈顶,系统不会创建新的实例,而是重用现有的Activity,并调用onNewIntent()方法。若Activity不在栈顶,则创建新实例。这种模式适用于希望在栈顶接收新Intent的...

    详解Android开发中Activity的四种launchMode

    在这种情况下,如果FirstActivity已经是栈顶的Activity,点击按钮时,由于Activity已经在栈顶,系统会调用onNewIntent()方法,而不是再次调用onCreate()。这意味着文本视图的文本不会改变,因为没有创建新的实例。 ...

    Android-跨应用通讯1

    本篇文章将深入探讨Android跨应用通讯的基本实现、参数详解以及数据处理。 1. **基本实现** 跨应用通讯的核心是通过Intent对象来传递信息。在Android中,有两种启动Activity的方式:显式调用和隐式调用。显式调用...

    Android的界面跳转

    在Android应用开发中,界面跳转是用户交互的基础,它涉及到Activity、Intent、启动模式等多个核心概念。本文将深入解析Android界面跳转机制,并通过实际的代码示例进行讲解。 一、Activity概述 Activity是Android...

    Android 四种加载模式

    ### Android 四种加载模式详解 在Android应用开发中,理解Activity的加载模式至关重要,它直接关系到应用程序的性能和用户体验。本篇文章将深入解析四种加载模式:`standard`、`singleTop`、`singleTask`和`...

Global site tag (gtag.js) - Google Analytics