日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

广播系统android安全:flag FLAG_RECEIVER_REGISTERED_ONLY的意义

發布時間:2025/4/16 windows 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 广播系统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);

????
鍵關代碼如下:

mTimeTickSender = PendingIntent.getBroadcast(context, 0,new Intent(Intent.ACTION_TIME_TICK).addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY), 0);

????
本來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的意义的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。