证明:SuperReceiver 是不存在的

tips:

1.

@deprecated

 android.telephony.gsm.SmsManager 

 Replaced by android.telephony.SmsManager that supports both GSM and CDMA.


2. 经研究发现,没有办法做到SuperReceiver 。。。

拿拦截短信来讲吧~~

a)首先,收到短信的系统广播属于有序广播,有序广播就意味着先收到这个广播的receiver可以把它abort掉,后续的receiver们就不能收到了。

b)还要明确一个概念,所谓有序广播和无序广播是针对receiver的优先级来讲的;无序广播的话,默认的所有的动态注册的receiver优先级都要大于静态注册的;有序广播则是严格按照优先级来的,当然,对于同样优先级的receiver,动态的要优于静态的。

c)所以说啊 ,没有绝对的SuperReceiver ,现在常见的app,基本都采用动态的注册方式,当然大家都会设法把优先级设为最大(即Integer.MAX_VALUE),这时候就拼的就是谁能先动态注册了,因为谁先动态注册,谁就能先收到broadcast,也就有了主动权~~~

d)目前想到的解决方案,就是在用户第一次启动app的时候,先启动一个service去做这个动态注册的工作,但是这个app被kill掉后,也就不能再生效了。这个是个问题啊。。。


还有就是要做开机自启动的工作,即处理action:boot_completed广播,这个在3.1之后,google有做一些安全上的处理,禁止从来没有启动过的app自启动。。。。这在一定程度上,可以防止恶意软件默默的干坏事。。。



All in all,谁能先收到广播。。。依赖于 谁先动态注册(前提是大家设置了最高的优先级哇)。。 这个又取决于谁先被启动(前提是大家在启动后都去做动态注册receiver的工作)。。所以。。。

某有绝对的SuperReceiver~~~ 


好像证明题 。。。。囧


本来想要做个SuperReceiver出来的,却有了这么个发现。。明天研究下Contacts相关的API~~~


经测试还发现,通过任务管理器 关闭 app后,静态、动态(这个用service来做)的接收器也不能起作用了。。。不是很明白静态的为什么也收不到了,,,,

疑问无论是什么程序与功能,它都能够强制关闭,不再自动重启,除非你自己再去启动了该软件或该功能,它们才会重启。 这个说明 某些 任务管理器是很强大的!~~~

你可能感兴趣的:(证明:SuperReceiver 是不存在的)