Android Notification PendingIntent:当前App被kill 掉之后,当前App发送的Notification消息是否会被自动清除掉 ?

问题: 

  • 之前大家有一个争论 “当前App被kill 掉之后,当前App发送的Notification消息是否会被自动清除掉 ?”
  • Google 为什么要设计 PendingIntent 这样一个东西?它的核心思想是什么?

一、针对第一个问题做了一个测试:应用A 发了一个Notification 消息,其中的PendingIntent是launch 应用A自己
  1. 使用DDMS,stop 应用A 进程,Notification 消息仍然存在。点击Notification 消息,会重新launch 应用A
  2. 使用adb shell kill,杀死应用A 进程,Notification 消息仍然存在。点击Notification 消息,会重新launch 应用A
  3. 进入Setting->App管理->应用A , 手动点击 “Force Stop”, Notification 消息会被清除
根据以上测试结果,可以看出:直接杀死应用A进程,Notification 消息是不会被清除的;上述第3点,之所以会清除Notification 消息,可能是点击“Force Stop”时,系统并不是单纯地kill应用进程,可能做了其它特殊处理,例如调用NotificationManager 做了一些清理工作。

二、首先谈谈我个人对PendingIntent的理解:Google 为什么要设计 PendingIntent 这样一个东西?
  • 从字面意思很容易知道,PendingIntent 是为了延迟调用,先构建好Intent,等调用的时候再触发
  • PendingIntent是对Intent的包装,供当前App之外的其他App调用,它赋予外部App一种能力,使得外部App可以如同当前App一样地执行Intent
PendingIntent的核心思想是第2点,如果单纯是为了第1点,有很多其它的实现机制;关键在于第2点“供当前App之外的其他App调用,它赋予外部App一种能力”!因为在Android 平台上,为了安全考虑,不同的App之间类似一个sandbox, 各个App执行的环境都是互相隔离的,不同App之间不能随意访问彼此的数据。其实这种互相隔离的安全机制,阻碍了App之间交流通信。鱼与熊掌不可兼得,Android 可能是出于某种折中考虑,设计了 PendingIntent ——由当前App决定将哪些数据暴露给外部App,赋予外部App一种通信能力,这样既保证了安全,又多了一种通信方式。

三、下面是Google官网对 PendingIntent 说明 http://developer.android.com/reference/android/app/PendingIntent.html 


PendingIntent可以看作是对Intent的包装,供当前App之外的其他App调用。PendingIntent主要持有的信息是它所包装的Intent和当前App的Context。外部App执行这个PendingIntent时,间接地调用里面的Intent。正由于PendingIntent中保存有当前App的Context,使它赋予外部App一种能力,使得外部App可以如同当前App一样的执行PendingIntent里的Intent,就算在执行时当前App已经不存在了,也能通过存在PendingIntent里的Context照样执行Intent。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值