广播系统android安全:flag FLAG_RECEIVER_REGISTERED_ONLY的意义
新手發帖,很多方面都是剛入門,有錯誤的地方請大家見諒,歡迎批評指正
????
????? ? ? ?做過時鐘widget的友朋該應對ACTION_TIME_TICK都很熟習,大家都用這個廣播來更新UI界面上的時光,但是新版本的android中,卻對TIME_TICK廣播做了制約,系統不再許允在AndroidManifest.xml面里靜態冊注receiver來受接TIME_TICK廣播了,程序員們迫被采取動態冊注的式方來監聽TIME_TICK廣播。不知道大家遇到這個情況時是什么想感?
????或許你時當在抱怨google害得你改代碼,而且動態冊注輕易失效,因為程進可能會因為內存不足而被kill失落。
????這不是給開發者添亂嗎?
????google為什么忽然不許允采取xml式方冊注TIME_TICK了呢?
????
????TIME_TICK廣播是alarmManagerService發送的,我們還是先看看源碼:
?????AlarmManagerService.java
public AlarmManagerService(Context context) {mContext = context;mDescriptor = init();// We have to set current TimeZone info to kernel// because kernel doesn't keep this after rebootString tz = SystemProperties.get(TIMEZONE_PROPERTY);if (tz != null) {setTimeZone(tz);}PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);mTimeTickSender = PendingIntent.getBroadcast(context, 0,new Intent(Intent.ACTION_TIME_TICK).addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY), 0);Intent intent = new Intent(Intent.ACTION_DATE_CHANGED);????
鍵關代碼如下:
????
本來google在intent中加入了FLAG_RECEIVER_REGISTERED_ONLY這個flag,這就是為什么xml冊注會報錯的原因。
????
????我們再來看看廣播ACTION_SCREEN_ON/OFF
????void com.android.server.PowerManagerService.initInThread()
????
void initInThread() { …… mScreenOnIntent = new Intent(Intent.ACTION_SCREEN_ON); mScreenOnIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); mScreenOffIntent = new Intent(Intent.ACTION_SCREEN_OFF); mScreenOffIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); …… } 每日一道理喜馬拉雅直沖霄漢,可上面有攀爬者的旗幟;撒哈拉沙漠一望無垠,可面里有跋涉者的腳印;阿爾卑斯山壁立千仞,可其中有探險者的身影;雅魯藏布江湍急浩蕩,可其中有勇敢者的故事。
????
再來看一個廣播,ACTION_BATTERY_CHANGED
????
電池電量發生變化的時候,系統發送此廣播
????
void com.android.server.BatteryService.sendIntent()
private final void sendIntent() { // Pack up the values and broadcast them to everyone Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED); intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_REPLACE_PENDING); …… }????看到沒有?它們都加了flag?FLAG_RECEIVER_REGISTERED_ONLY。
????也就是說,這些系統廣播都只能動態冊注。
????面下說說google這樣做的的目:
????很多毒病程序為了證保自己被止終后可以再次行運,都會在xml中冊注一些系統廣播,妄圖利用這些系統高頻廣播來實現自動啟。
????比如在老版本的android系統中,毒病程序可以通過監聽TIME_TICK來動啟自己的service后臺行運,做一些秘隱的作工,而且就算自己被kill失落了,也能很快重新動啟。
????而一旦這些系統廣播加了flag?FLAG_RECEIVER_REGISTERED_ONLY,這些毒病程序就沒轍了。
????google的這一修改無疑提升了android系統的安全性。
文章結束給大家分享下程序員的一些笑話語錄: 關于編程語言
如果 C++是一把錘子的話,那么編程就會變成大手指頭。
如果你找了一百萬只猴子來敲打一百萬個鍵盤,那么會有一只猴子會敲出一 段 Java 程序,而其余的只會敲出 Perl 程序。
一陣急促的敲門聲,“誰啊!”,過了 5 分鐘,門外傳來“Java”。
如果說 Java 很不錯是因為它可以運行在所有的操作系統上,那么就可以說 肛交很不錯,因為其可以使用于所有的性別上。
總結
以上是生活随笔為你收集整理的广播系统android安全:flag FLAG_RECEIVER_REGISTERED_ONLY的意义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 来自damon的zencart二次开发教
- 下一篇: 两种创建单例的方法