`
rayloo
  • 浏览: 88999 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法

阅读更多

android:launchMode="singleTask" 和 onNewIntent(Intent intent)两个特性,现总结一下经验:

android:launchMode="singleTask" 配置在 Mainifest 中,它保证了栈中此Activity总是只有一个,无论你启动它多少次;

onNewIntent(Intent intent) 是Override Activity的父类方法,只有仅在点Home键退出Activity而再次启动新的Intent进来才被调用到;

它们两结合使用,可以做到监听home键(仅当发起新的Intent)。

代码如下:

Manifest.xml

view plaincopy to clipboardprint?
<activity android:name=".OnNewIntentDemo"
android:launchMode="singleTask"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="video/*" />
</intent-filter>
</activity>
<activity android:name=".OnNewIntentDemo"
android:launchMode="singleTask"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="video/*" />
</intent-filter>
</activity>

Activity 中

view plaincopy to clipboardprint?
@Override
protected void onNewIntent(Intent intent) {
if(DEBUG) Log.i(TAG, "onNewIntent ~~~~~~~ intent = "+intent);
super.onNewIntent(intent);
}
@Override
protected void onNewIntent(Intent intent) {
if(DEBUG) Log.i(TAG, "onNewIntent ~~~~~~~ intent = "+intent);
super.onNewIntent(intent);
}

注意: 当按Home键退出,再长按Home键进入,此时onNewIntent不被访问,因为再次进入的时候没有被发起Intent 。

补充说明:

在研发的项目中由于使用到 播放器为单例 singleInstance,再次调用,需要使用onNewIntent

分享到:
评论

相关推荐

    activity的四种启动模式和onNewIntent的关系

    需要注意的是,当Activity接收到新的Intent时,应当使用`setIntent(intent)`方法更新当前Activity的Intent对象,以便于后续可以通过`getIntent()`方法获取到最新的Intent数据。 **示例代码**: ```java @Override ...

    Activity启动模式

    如果Activity已经存在,那么系统会将其任务栈中的其他Activity移除,然后将Intent传递给Activity的onNewIntent()方法。此模式常用于主界面或者设置页面,确保用户始终回到Activity的初始状态。 4. **单栈顶模式...

    android 退出app 退出应用程序

    2 设置入口activity的启动模式android:launchMode="singleTask",重写onNewIntent方法, 在退出activity时,设置intent.setAction("exit_app");然后跳转到栈底activity, 这样就可以清除栈底之外的所有activity,...

    Android的Activity的Launch模式之SingleTop案例

    在Android应用开发中,Activity是用户界面的基本组件,它负责与用户进行交互。理解Activity的启动模式至关重要,因为它直接影响到应用程序的行为和流程控制。本文将深入探讨`SingleTop`启动模式,并通过一个实际的...

    onNewIntent方法的使用

    在Android应用开发中,`onNewIntent()`方法是Activity生命周期中的一个重要组成部分,它与Intent对象紧密相关。Intent在Android系统中扮演着消息传递的角色,用于启动或传递数据给不同的组件,如Activity、Service等...

    同一个APK多个icon进入同一个Activity的不同tab页

    在PeopleActivity的onNewIntent(Intent intent)方法中,我们可以这样处理: ```java @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); String className = intent....

    Android Activity LaunchMode 验证

    同时,使用Logcat打印关键信息,比如onCreate()、onNewIntent()等,以确认Activity实例何时被创建或复用。 4. **理解任务栈(Task)和返回栈(Back Stack)**:理解Android的Activity管理机制,如任务栈的概念,这...

    Android Activity设置相同的action进行判断源码.rar

    但开发者可以通过设置`android:launchMode`属性避免这种情况,例如使用“singleTask”或“singleTop”模式,这样只有一个Activity实例会被启动或重用。 4. **源码分析**:压缩包中的"Android Activity设置相同的...

    Android 改变Activity切换方式

    总之,Android提供了多种方式来改变Activity的切换方式,包括使用Intent Flag、调整Activity的launchMode以及利用ActivityOptions实现过渡动画。开发者可以根据应用场景灵活选择,以打造独特且流畅的用户导航体验。...

    android onnewintent

    - **生命周期影响**:当使用`singleTask`或`singleInstance`启动模式时,若活动已经在任务栈中存在,则新的意图不会导致新实例的创建,而是通过调用`onNewIntent()`方法将意图数据传递给现有实例。 - **数据传递**:...

    Android Activity单例.doc

    当`Activity`的启动模式为`singleTask`或`singleInstance`时,系统会调用`onNewIntent()`方法,因此你需要重写这个方法来处理新的`Intent`: ```java @Override protected void onNewIntent(Intent intent) { super...

    安卓的学习

    singleTask模式下,系统会在一个新的任务栈中启动Activity,并且如果栈中已经存在这个Activity的实例,那么它会成为这个任务栈的根Activity,同时系统会通过调用onNewIntent()方法将Intent传递给它,而不是创建新的...

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

    但需要注意的是,如果需要在启动时执行特定的初始化操作,可能需要重写`onNewIntent()`方法来处理新的Intent,而不是在`onCreate()`中,因为`onCreate()`在`singleTop`模式下可能不会被调用。此外,`singleTop`模式...

    Android 获取浏览器当前分享页面的截屏示例

    android:launchMode="singleTask"&gt; &lt;intent-filter&gt; &lt;action android:name="android.intent.action.SEND"/&gt; &lt;action android:name="android.intent.action.SEND_MULTIPLE"/&gt; &lt;category android:name="android....

    android Activity加载方式

    如果ActA的launchMode设为singleTop,当ActA已经位于栈顶且再次被启动时,系统不会创建新的ActA实例,而是调用onNewIntent()方法,传递新的Intent给现有的ActA实例。 3. **singleTask(单一任务模式)** ...

    详解Android开发中Activity的四种launchMode

    Activity的启动模式(launchMode)是Android系统控制Activity实例创建和管理的重要机制,它决定了Intent如何启动Activity以及如何处理Activity栈(任务栈,task stack)。本文将深入探讨Android中的四种Activity启动...

    launchmodedemo

    这意味着,如果在一个任务栈中,已经有一个Activity实例在栈顶,再次启动它时,系统不会创建新的实例,而是调用它的onNewIntent()方法,传递新的Intent数据。 了解这四种启动模式对于优化应用的导航逻辑和内存使用...

    Android Activity LaunchMode Test

    在Android应用开发中,Activity是用户界面的基本组件,它负责与用户进行交互。LaunchMode是Android系统中Activity的一项重要属性,用于控制Activity的启动行为。理解并熟练掌握Activity的LaunchMode对于优化应用性能...

    Android 四种加载模式

    当启动一个新的Activity时,如果目标Activity已经位于任务堆栈的顶部,那么不会创建新的实例,而是将意图(Intent)传递给当前实例的`onNewIntent()`方法。这意味着,对于连续多次启动同一个Activity的操作,只要...

    Activity-LaunchMode

    在SingleTop模式下,如果目标Activity位于栈顶,那么系统不会创建新的实例,而是重用栈顶的实例,并调用它的onNewIntent()方法来传递新的Intent。这种方式可以避免创建不必要的Activity实例,常用于那些接收广播或...

Global site tag (gtag.js) - Google Analytics