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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android广播注册源码,android 广播源码简要分析-注册

發布時間:2025/3/12 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android广播注册源码,android 广播源码简要分析-注册 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

android broadcast

1,廣播注冊

靜態注冊:

在系統服務啟動時會添加PackageManagerService,在該類的構造方法中就會對各個應用安裝目錄的apk文件進行掃描解析

詳細步驟

1,PackageManagerService初始化的時候,掃描系統目錄下的文件

image.png

2,遍歷循環files文件

image.png

3,最終會調用兩個方法:PackageParser.parsePackage()方法;scanPakageLI()方法

image.png

4,進入PackageParse類;看到類里面的靜態變量,估計都會知道這貨是干什么用的,解析AndroidManifest.xml文件

image.png

5,PackageParse類:最終跳到這里,AssetManager new出來的,然后addAssetPath(apkPath),就可以后去apk里面的資源文件了(插件化方案);

image.png

6,調用方法順序分別為:parseBaseApk->parseBaseApkCommon->parseBaseApplication;在這個方法里面有一坨代碼如下:解析xml,然后將解析出來的四大組件放到集合里

image.png

7,再回到PackageManagerService;

PackageParser.Package pkg = pp.parsePackage(scanFile, parseFlags);pkg對象包含了當前包里面所有的數據;然后再調用scanPackageLI()->scanPackageDirtyLI();最后將pkg里面的四大組件又add到下面的IntentResolver的子類ActivityIntentResolver、ServiceIntentResolver、ProviderIntentResolver,ArrayMap對象里面

image.png

動態注冊:

1,調用ContextImpl類中的registerReceiver方法:(時序圖比較靠譜,看起來比較清晰,但是本人比較懶)

調用Context實現類ContextImpl的注冊方法

image.png

2,getReceiverDispatcher方法中的map是以BroadcastReceiver對象r為key,以ReceiverDispatcher對象rd為value保存在一個ArrayMap中,而這個ArrayMap又以Context為key,自己為value保存在LoadedApk類中的成員變量mReceivers中。這樣,只要給定Context和BroadcastReceiver就可以查看LoadedApk中是否已經存在相應的廣播接收分發器ReceiverDispatcher了

QQ截圖20171017185143.png

image.png

3,接下來調用AMS的registerReceiver方法

動態注冊的廣播都添加到mReceiverResolver中了

總結:靜態廣播和動態廣播注冊保存的位置不一樣?

總結

以上是生活随笔為你收集整理的android广播注册源码,android 广播源码简要分析-注册的全部內容,希望文章能夠幫你解決所遇到的問題。

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