編輯: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目錄為例
Android RoboGuice使用指南(5) Binding Annotations
有些情況需要將同一類型映射到不同的類實現,還是使用繪圖的例 子.IShape, Rectangle, MyRectangle, MySquare,有如下繼承關系:我們可能
享受Android應用程序的Java技術盛宴
准備開始本文介紹幾種處理復雜情況的 Android SDK 工具。開發 Android 應用程序,需要最新版 Android SDK,這需要一個 Java Develop
windows phone程序啟動和android程序啟動原理的比較
windows phone 程序是如何啟動的了,他和android程序有什麼區別,我們重點從native code 層面 來分析在windows phone 程序啟動的時
Android RoboGuice使用指南(3) Bindings 概述
一個應用中類於類之間的依賴關系可能非常復雜,創建於個類實例,需要先創 建類所依賴的類的示例,而創建所依賴類的實例,這些類又可能依賴其它類,以 此類推。因此在創建一個類實例
Android ApiDemos示例解析(32):App->Preferences->Preference dependencies
Preferences之間可以定義依賴關系,在第一個例子中已有說明。對應