編輯:Android開發教程
導讀:本文說明系統是如何注冊動態廣播以及靜態廣播,這裡主要注意其注冊的順序
這篇文章主 要是針對我前兩篇文章
android安全問題(四) 搶先開機啟動 - 結果篇
android安全問題(五 ) 搶先攔截短信 - 結果篇
之前只給出了結果,並沒有給出代碼分析,現在給出第一步分的分析
大家都知道,廣播接收器分為動態注冊和靜態注冊兩種
靜態接收,就是配置到manifest.xml文 件中,PackageManagerService掃描後記錄其信息……
動態接收,就是從代碼中注冊,通過調用下面的 方法實現
Intent android.content.Context.registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
(下面的流程圖估計畫的比較水,將就看一下吧,得補習一下UML了)
首先分析靜態注冊Receiver的流程
靜態receiver的注冊是由PackageManagerService開機的時 候負責初始化
(PackageManagerService之後簡稱為PMS)
PMS在開機的時候會對系統一些目錄 逐個掃描,解析apk文件。靜態廣播接收器就是在PMS做這件事情的時候順便處理的。
PMS會解析apk的 manifest文件,查找這裡注冊的receiver,然後加載到內存中
下面看一下PMS是如何工作的
這 部分內容沒有什麼難度,只要有耐心就行,我畫了一個很簡單流程圖,從調用PMS的構造函數開始
注意 ,這裡有幾個同名函數,大家需要分清。並不是同一個函數調用了兩次
這裡只看幾處
1.PMS初 始化的時候干了些什麼
當然,PMS會做很多很多事情,這裡我們只看我們關注的,和這篇文章相關的部 分
// Collect all system packages. mSystemAppDir = new File(Environment.getRootDirectory(), "app"); mSystemInstallObserver = new AppDirObserver( mSystemAppDir.getPath(), OBSERVER_EVENTS, true); mSystemInstallObserver.startWatching(); scanDirLI(mSystemAppDir, PackageParser.PARSE_IS_SYSTEM | PackageParser.PARSE_IS_SYSTEM_DIR, scanMode, 0);
掃描目錄的順序
system/framework
system/app
vendor/app
data/app
drm/app- private
這裡以system/app目錄為例
有些情況需要將同一類型映射到不同的類實現,還是使用繪圖的例 子.IShape, Rectangle, MyRectangle, MySquare,有如下繼承關系:我們可能
准備開始本文介紹幾種處理復雜情況的 Android SDK 工具。開發 Android 應用程序,需要最新版 Android SDK,這需要一個 Java Develop
windows phone 程序是如何啟動的了,他和android程序有什麼區別,我們重點從native code 層面 來分析在windows phone 程序啟動的時
一個應用中類於類之間的依賴關系可能非常復雜,創建於個類實例,需要先創 建類所依賴的類的示例,而創建所依賴類的實例,這些類又可能依賴其它類,以 此類推。因此在創建一個類實例
Preferences之間可以定義依賴關系,在第一個例子中已有說明。對應