1、设置当用户触发Notification时所发出的Intent,如果设置 FLAG_ACTIVITY_CLEAR_TOP 与 FLAG_ACTIVITY_NEW_TASK ,而launchMode保持不变(即默认为:standard),则当用户用手点击Notification时,此时匹配到后台的Task,并把在堆栈中对应要启动的Activity之前的所有Activity全部清除掉,并且由于 standard 默认对于新的Intent总是创建新的Activity对象。因此存在于该Task中旧的Activity也会被清除掉,然后在该Task中创建新的Activity对象。
2、设置当用户触发Notification时所发出的Intent,如果设置 FLAG_ACTIVITY_CLEAR_TOP 与 FLAG_ACTIVITY_NEW_TASK,而launchMode设置为singleTop,则当用户用手点击Notification时,同1一样,只是存在于该Task中旧的Activity不会被清除掉,此时Intent传递给已经存在的Activity并不会创建新的Activity。
上面得出的结论,经过返回测试,1是正确的,2却存在着很莫名奇妙的问题
假设现在有个程序X,有2个Activity,分别是 A , B ,其中 A 是 设置了android.intent.action.MAIN的Activity(入口Activity),两者的launchMode都为默认的standard,创建该Intent的代码如下:
1
Intent intent = new Intent(this, A.class);
2
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
很明显我们设置的是当用户点击 Notification 时,应该出现的是 A Activity,但无论如何按home键退出当前Task,并使之成为后台Task,在从程序列表启动该程序总能恢复到Task顶端的Activity给用户,如 当前 B,按home键,在从程序列表启动 X ,这个时候出现的Activity任然是 B,但按照如下的方法操作却会使得从程序列表启动 X,出现的是新创建的A Activity,其中经过Log打印得知下面的所有Activity都在同一个Task中
1、打开程序出现A,从A startActivity 到B,按Home键,点Notification出现A,再从A startActivity 到 B,按Home键,从程序列表打开程序 出现新创建的实例A
2、打开程序出现A,从A startActivity 到B,点Notification出现A,再从A startActivity 到B,按Home键,从程序列表打开程序也出现了新创建的实例A
这里所说的“新创建的实例A”都是创建在同一Task中的新的A Activity实例,也就是说按照以上两种方法,再按返回键,出现的则是 B,再按返回键出现的则是 A。这里我实在想不出为什么会在同一Task中创建一个新的Activity,就算从程序列表打开程序的Intent使用了FLAG_ACTIVITY_NEW_TASK标记,我也不知道为什么,如果有朋友知道,一定要告诉我。
到这里,我开始发现 从程序列表启动 的优越性,因为不管是在什么时候按Home,再次从程序列表启动时,总能返回到Task的栈顶Activity。起初我想过一个办法,便是重载Activity写一个类实现当onResume的时候更新Notification,然后我的所有Activity类都直接从该类继承,使得当按Home 之后总能让Notification记住Task的栈顶Activity,就像QQ一样,但这种方法当然有点牵强,于是我开始看SDK 中 有关Home的Simple,终于发现了如果使用如下的Intent,便不会调用对应的Activity,而是调用Task中的栈顶Activity
view sourceprint?
1
Intent intent = new Intent(Intent.ACTION_MAIN);
2
intent.addCategory(Intent.CATEGORY_LAUNCHER);
3
intent.setClass(this, Main.class);
4
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
除了 setClass 可以换成使用 setClassName 绑定,FLAG_ACTIVITY_RESET_TASK_IF_NEEDED可以不设,其他的选项都缺一不可。设置ACTION_MAIN与CATEGORY_LAUNCHER是把该Intent发给了系统对应创建程序的模块,然后系统该模块根据设定的包与类信息还有flags进行处理。当然所有的Intent工作原理都是这样,只是对 ACTION_MAIN - CATEGORY_LAUNCHAR 的处理较为特殊,使得总是显示Task栈顶的Activity而不是setClass设定的Activity类。
分享到:
相关推荐
本教程将基于“iphone notification 使用实例”这一主题,详细介绍如何在iPhone上实现通知功能。 首先,我们要了解iOS中的通知类型:本地通知(Local Notification)和远程通知(Remote Notification,通常与Apple ...
标题中的“Notification使用”指的是Android系统中的通知机制。在Android应用开发中,Notification是一种重要的用户交互方式,它可以在状态栏中展示消息,即使用户不在应用界面也能接收到信息。Notification通常用于...
在Android系统中,Notification是应用与用户交互的重要方式,它可以在状态栏中显示信息,即使用户不在使用应用时也能提醒用户有新的事件发生。本文将深入探讨如何在Android中使用Notification,包括基本用法、自定义...
本项目是一个基于Android 2.3(Gingerbread)版本的小实例,旨在帮助开发者学习如何使用Notification API创建和管理通知。 首先,创建Notification需要使用`NotificationCompat.Builder`类,它是Android Support ...
下面是对 `Notification` 使用的详细讲解。 首先,创建一个 `Notification` 需要以下步骤: 1. 获取 `NotificationManager` 对象,这是管理通知的核心组件。通过调用 `getSystemService()` 方法并传入 `...
本文实例讲解了通知Notification使用方法,此知识点就是用作通知的显示,包括振动、灯光、声音等效果,分享给大家供大家参考,具体内容如下 效果图: MainActivity: import java.io.File; import android....
Notification分为多种类型,包括Toast、StatusBar Notification和Dialog Notification,每种都有其特定的使用场景。 1. Toast Notification: Toast是一种短暂的通知方式,它在屏幕上显示一段时间后自动消失,不会...
在消息通知时,我们经常用到两个组件Toast和Notification。特别是重要的和需要长时间显示的信息,用Notification就最合适不过了。当有消息通知时,状态栏会显示通知的图标和文字,通过下拉状态...
Android Notification 使用方法详解 Android Notification 是 Android 系统中的一种重要组件,用于向用户显示重要信息和提示。Android Notification 使用方法详解中,我们将介绍如何使用 Android Notification ...
Android Notification使用方法总结 Android Notification是Android系统中的一种重要机制,用于向用户显示重要信息,例如来自应用程序的更新、警报、提醒等。下面是Android Notification使用方法总结的相关知识点: ...
Push Notification,为了是手机应用 keep onlive ,经常会有一个一直运转的后台服务程序,这样的应用使手机特别耗电,现在用了 Push Notification 可以来处理这个问题。
为了使通知的出现和消失更加平滑,Angular UI Notification 使用了 CSS3 转换。这些转换可以实现如淡入淡出、滑动等动画效果,使得通知的展示更加吸引用户注意力,同时增加了交互的趣味性。 ### 使用方法 1. 引入库...
4. **构建并发布Notification**:使用Builder构建出`Notification`对象后,通过`NotificationManager`的`notify()`方法将其发布到系统。`notify()`方法需要一个唯一的通知ID,以区分不同的通知。 此外,`...
- **内容概述**: 该文章分享了一些高级的Notification使用技巧,例如如何处理复杂的点击事件、如何动态更新Notification的内容等。 **6. 在Android中使用Notification进行提示** - **链接**: ...
本篇文章将详细介绍如何在Android 4.0及以上版本中使用Notification,以及如何处理兼容性问题。 ### 链式调用创建Notification 在Android 4.0及以上版本,推荐使用`Notification.Builder`类通过链式调用来构建...
在构建`Notification`时,我们需要使用`NotificationCompat.Builder`类,它是Android Support Library提供的兼容版本,能确保在多个Android版本上运行。 1. **创建基本Notification** 使用`NotificationCompat....
使用`NotificationCompat.Builder`类来构建一个Notification。首先,需要导入以下库: ```java import android.app.Notification; import android.app.NotificationChannel; import android.app....
Notification 和 PendingIntent 的使用 Notification 是 Android 系统中的一种机制,用于在系统状态栏中显示通知信息,通常用于提醒用户某些事件的发生。PendingIntent 则是 Android 中的一种机制,用于在特定的...