- 浏览: 562403 次
- 来自: -
博客专栏
-
libgdx 游戏开发
浏览量:12269
文章分类
- 全部博客 (171)
- OS (1)
- JavaScript (13)
- Struts (2)
- Regular Expression (1)
- Java (14)
- HTML (4)
- XML (1)
- Non-Relational Database (2)
- Miscellaneous (7)
- Lotus Notes (8)
- Algorithm (3)
- Web Analytics (6)
- Web (8)
- Perl (3)
- PHP (3)
- C & C++ (1)
- Shell (7)
- Google (1)
- Android (31)
- iPhone (1)
- SQL (1)
- HTML5 (3)
- jQuery (6)
- CSS (6)
- PostgreSQL (1)
- Design Patterns (1)
- Excel (1)
- Magento (4)
- jMeter (3)
- SEO (1)
- libgdx (5)
- Software (4)
- App (1)
- Game (1)
- Gradle (1)
- Linux (16)
- Ubuntu (4)
- Docker (2)
- Spring (2)
- Other (3)
- Directory Server (1)
- CentOS (1)
- Python (1)
- VCS (3)
- Database (1)
- Open Source (1)
最新评论
-
ls0609:
赞一个,支持下博主。
[原创] Android ListView 在右上角添加三角形图标和文字 -
love297:
不让别人商用,自己先商用起来了。
手机游戏开发展示 -
a851206:
你的有些类是哪里来的?我想研究一下你的程序,可是有些类没有代码 ...
[原创] Google Custom Search & Yahoo Boss Search | Web Search API 使用 -
ypppk:
BitmapFactory.Options options = ...
[原创] 连载 1 - 深入讨论 Android 关于高效显示图片的问题 - 如何高效的加载大位图 -
笑遍世界:
我也遇到了,弄清了其中原因,可参考我的博客:http://sm ...
[原创] 使用 jMeter 登录 Wordpress
阅读难度:中
阅读前提:
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)):
简单说明下:如果在 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() 中进行一些相同的处理,因此可以像下面这样做:
最后总结一下,在启动 Activtiy 时,如果希望在 onCreate() 不被触发的的情况下,依然可以对 Intent 进行操作,这就需要使用 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.
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()。
参考文献:
- http://extra-vision.blogspot.jp/2016/08/android-activity-onnewintent.html
- https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
- https://developer.android.com/guide/components/activities/activity-lifecycle.html
发表评论
-
[转] DialogFragment Fragment already added
2017-10-25 11:16 2765原文地址:http://blog.csdn.net/u0129 ... -
Android Studio .gitignore
2017-10-16 15:44 915参考文献: https://github.com/github ... -
[转] How to detect incoming calls in an Android
2017-10-13 14:14 1237原文地址:https://stackoverflow.com/ ... -
[转] Android 检测电源按钮是否被按下
2017-10-11 12:55 1066原文地址:https://stackoverflow.com/ ... -
[转] Android Webview: “Uncaught TypeError: Cannot read property 'getItem' of null
2017-08-14 15:09 2365原文地址:https://stackoverflow.com/ ... -
[原创] 使用 Vitamio 播放视频作为 Splash 时出现失真情况的解决方案
2017-08-02 09:10 1232目前在做关于视频及流媒体播放项目时,有这样一个需求,应用启动时 ... -
[转] Android: Expand/collapse animation
2017-07-31 14:57 1592原文地址:https://stackoverflow.com/ ... -
[原创] Android ListView 在右上角添加三角形图标和文字
2017-07-26 17:24 2797最终显示效果如下图,在右上角添加三角形图标并在图标内显示文字: ... -
[转] Detect home button press in android
2017-07-20 17:49 1192原文地址:https://stackoverflow.com/ ... -
[原创] 开启 Android TextView Marquee
2017-07-18 15:47 1832亲测可能。直接上代码。 测试机器:XiaoMi 2S Andr ... -
[原创] 小米手机无法真机调试
2017-07-06 09:10 6513系统环境: 小米 2S MIUI 版本:8.0.1.0(LXA ... -
了解数据绑定 - Data Binding Library
2017-06-22 15:31 993原文地址: -
How to play gif with Fresco
2017-06-22 14:00 675原文地址:https://stackoverflow.com/ ... -
设置 Toolbar(ActionBar) 上的按钮颜色
2017-06-22 08:11 2093原文地址: https://stackoverflow.com ... -
Display back button on action bar and back event
2017-06-22 08:00 770原文地址: https://stackoverflow.com ... -
Gradle 修改 Maven 仓库地址
2017-06-02 15:51 1701修改 Gradle Maven 仓库地址为阿里云镜像 修改根 ... -
[转] How to clear cookies and cache of webview on Android when not in webview?
2017-04-26 09:28 2212原文地址:http://stackoverflow.com/a ... -
[转] Android 在程序中如何动态的修改程序图标
2017-03-02 17:05 959http://stackoverflow.com/a/4150 ... -
[转] Android Libraries
2017-01-16 10:28 579原文地址: https://dzone.com/article ... -
[原创] Android 长按识别图中二维码 - Zxing
2017-01-10 09:27 6422前提: 本文使用了 ButterKnife 依赖库 开始环境 ...
相关推荐
例如,SingleTop模式下,如果新启动的Activity已经在栈顶,系统不会创建新的实例,而是调用`onNewIntent()`。 总之,深入理解Activity生命周期和其背后的源码逻辑,对于编写高效、响应迅速且用户体验优秀的Android...
在Android应用开发中,`onNewIntent()` 是一个重要的生命周期方法,主要负责处理在Activity已经启动并且处于前台或后台时接收到的新Intent。这个方法在特定的`launchMode`下被调用,例如`singleTask`或`...
在Android应用开发中,Activity是构成用户界面的基本组件,它代表了一个单一的屏幕界面。Activity之间的交互和跳转对于构建流畅的用户体验至关重要。为了管理Activity的生命周期和用户界面的流程,Android系统提供了...
### Android onNewIntent机制详解 #### 一、`onNewIntent()`方法介绍 在Android开发过程中,`onNewIntent()`方法对于理解应用内部如何处理来自外部或其他组件的意图(Intent)至关重要。此方法允许开发者捕获并响应...
然后在目标Activity的`onCreate()`或`onNewIntent()`中使用`getExtras()`获取数据: ```java Intent intent = getIntent(); String value = intent.getStringExtra("key"); ``` 在AndroidManifest.xml中,需要为每...
- SingleTop:如果Activity已经在栈顶,系统不会创建新实例,而是调用onNewIntent()方法。 - SingleInstance:Activity及其所有子Activity都在单独的任务栈中,确保只有一个实例。 - SingleTask:Activity及其子...
在Android应用开发中,Activity的启动模式是决定如何创建和管理Activity实例的关键因素。本文将深入探讨`singleTop`启动模式,通过实例分析其功能、用法以及相关的注意事项。 `singleTop`模式是Android Activity四...
在Android应用开发中,`LaunchMode`是一个至关重要的概念,它决定了Activity如何启动以及与任务栈(Task Stack)之间的交互。本篇文章将深入探讨`LaunchMode`的不同模式及其实际应用场景,通过实例`LaunchModeDemo`...
Activity是Android应用开发中的核心组件之一,用于构建用户界面并管理与用户的交互。在Android系统中,Activity扮演着用户界面窗口的角色,展示内容并响应用户的操作。以下是对Activity配置、启动和关闭的详细讲解。...
### Android NFC开发实战详解 #### 一、NFC技术简介 近场通信(Near Field Communication,简称NFC)是一种短距离无线通信技术,允许电子设备在几厘米的距离内进行数据交换。NFC技术最初由飞利浦公司和诺基亚公司...
Android Activity生命周期是理解Android应用程序行为的关键,它是每个Android开发者必须掌握的基础知识。Activity作为Android四大组件之一,扮演着用户界面的主要角色,它负责处理用户的交互并显示内容。 1. **生命...
### Android四大组件详解:Activity的生命周期与启动模式 在深入探讨Android四大组件之一的Activity之前,我们先简要概述一下Android四大组件的概念。这四大组件包括:Activity(负责UI交互)、Service(执行后台...
与单任务模式类似,此模式下,如果目标Activity已经在栈顶,系统不会创建新的实例,而是重用现有的Activity,并调用onNewIntent()方法。若Activity不在栈顶,则创建新实例。这种模式适用于希望在栈顶接收新Intent的...
在这种情况下,如果FirstActivity已经是栈顶的Activity,点击按钮时,由于Activity已经在栈顶,系统会调用onNewIntent()方法,而不是再次调用onCreate()。这意味着文本视图的文本不会改变,因为没有创建新的实例。 ...
本篇文章将深入探讨Android跨应用通讯的基本实现、参数详解以及数据处理。 1. **基本实现** 跨应用通讯的核心是通过Intent对象来传递信息。在Android中,有两种启动Activity的方式:显式调用和隐式调用。显式调用...
在Android应用开发中,界面跳转是用户交互的基础,它涉及到Activity、Intent、启动模式等多个核心概念。本文将深入解析Android界面跳转机制,并通过实际的代码示例进行讲解。 一、Activity概述 Activity是Android...
### Android 四种加载模式详解 在Android应用开发中,理解Activity的加载模式至关重要,它直接关系到应用程序的性能和用户体验。本篇文章将深入解析四种加载模式:`standard`、`singleTop`、`singleTask`和`...