一般應用自啟動是通過開機廣播實現(xiàn)。 1.系統(tǒng)開機后,系統(tǒng)產(chǎn)生并發(fā)送開機廣播,同時設置開機廣播的Flag為FLAG_excluds_stopped_packages,即對于之前未啟動過的應用不發(fā)送開機廣播。 2.系統(tǒng)剛開機時,檢查應用之前是否啟動是通過讀取存儲中的配置文件(package-restriction.xml)中應用的stopped屬性來判斷的。 3.當上一次打開應用,10秒后,系統(tǒng)會將應用的stopped屬性設置為false,寫入配置文件。 當上一次關(guān)閉應用,10秒后,系統(tǒng)會將應用的stopped屬性設置為true,寫入配置文件。 總結(jié):在應用打開或關(guān)閉后,系統(tǒng)刷新應用狀態(tài)到配置文件中會有10秒的延時。
成都創(chuàng)新互聯(lián)主營稷山網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,成都app軟件開發(fā)公司,稷山h5小程序制作搭建,稷山網(wǎng)站營銷推廣歡迎稷山等地區(qū)企業(yè)咨詢
AMS主要功能:
AMS是Android中最核心的服務,主要負責系統(tǒng)中四大組件的啟動、切換、調(diào)度及應用進程的管理和調(diào)度等工作。還負責啟動或殺死應用程序的進程。
WMS主要功能:
為所有窗口分配Surface。
管理Surface的顯示順序、尺寸、位置。
管理窗口動畫。
輸入系統(tǒng)相關(guān):WMS是派發(fā)系統(tǒng)按鍵和觸摸消息的最佳人選,當接收到一個觸摸事件,它需要尋找一個最合適的窗口來處理消息。
PWS主要功能:
PMS 用來管理跟蹤所有應用APK,包括安裝,卸載,解析,控制權(quán)限等。
SystemServer也是一個進程,包括AMS、PMS、WMS等等。
zygote意為“受精卵“。Android是基于Linux系統(tǒng)的,而在Linux中,所有的進程都是由init進程直接或者是間接fork出來的,zygote進程也不例外。
App進程是用戶點擊桌面icon時,通過Launcher進程請求SystemServer,再調(diào)用Zygote孵化的。
①點擊啟動一個App,Launcher進程采用Binder IPC向ActivityManagerService發(fā)起startActivity請求;
②ActivityManagerService接收到請求后,向zygote進程發(fā)送創(chuàng)建進程的請求;
③Zygote進程fork出新的子進程,即App進程;
④App進程通過Binder IPC向sytem_server進程發(fā)起綁定Application請求;
⑤system_server進程在收到請求后,進行一系列準備工作后,再通過binder IPC向App進程發(fā)送scheduleLaunchActivity請求;
⑥App進程的binder線程(ApplicationThread)在收到請求后,通過handler向主線程發(fā)送LAUNCH_ACTIVITY消息;
⑦主線程在收到Message后,通過發(fā)射機制創(chuàng)建目標Activity,并回調(diào)Activity.onCreate()等方法。
⑧到此,App便正式啟動,開始進入Activity生命周期,執(zhí)行完onCreate/onStart/onResume方法,UI渲染結(jié)束后便可以看到App的主界面。
備注:
Launcher,PMS,Zygote,App進程是三個獨立的進程,相互通信就需要使用進程間通信機制。與Zygote通信是使用的socket通信,Launcher,PMS,App進程間使用的是Binder機制。
article class="_2rhmJa"
Android 設備開機自啟動的可以用廣播實現(xiàn),因為 Android 設備開機時會發(fā)送一條開機廣播 "android.intent.action.BOOT_COMPLETED"。接收后實現(xiàn)啟動就完成了。
接下來是準備工作
如果按照上面的全部步驟后操作后,重啟沒有自動啟動程序,怎么辦呢?是怎么回事呢?
*那么首先請檢查一下你的手機是不是安裝了360等安全助手之類的軟件,如果有,請在軟件的自啟動軟件管理中將app設置為允許
*我的手機沒有安裝這些軟件,但是手機中自帶了安全助手,有的手機系統(tǒng)設置里面自帶了自啟動軟件管理的功能 ,所以在這里將我們的app設置為允許開機啟動),重啟手機,測試是否成功。
然而并沒有成功
接收不到BOOT_COMPLETED廣播可能的原因
(1)、BOOT_COMPLETED對應的action和uses-permission沒有一起添加
(2)、應用安裝到了sd卡內(nèi),安裝在sd卡內(nèi)的應用是收不到BOOT_COMPLETED廣播的
(3)、系統(tǒng)開啟了Fast Boot模式,這種模式下系統(tǒng)啟動并不會發(fā)送BOOT_COMPLETED廣播
(4)、應用程序安裝后重來沒有啟動過,這種情況下應用程序接收不到任何廣播,包括BOOT_COMPLETED、ACTION_PACKAGE_ADDED、CONNECTIVITY_ACTION等等。
Android3.1之后,系統(tǒng)為了加強了安全性控制,應用程序安裝后或是(設置)應用管理中被強制關(guān)閉后處于stopped狀態(tài),在這種狀態(tài)下接收不到任何廣播,除非廣播帶有FLAG_INCLUDE_STOPPED_PACKAGES標志,而默認所有系統(tǒng)廣播都是FLAG_EXCLUDE_STOPPED_PACKAGES的,所以就沒法通過系統(tǒng)廣播自啟動了。所以Android3.1之后
(1)、應用程序無法在安裝后自己啟動
(2)、沒有ui的程序必須通過其他應用激活才能啟動,如它的Activity、Service、Content Provider被其他應用調(diào)用。
存在一種例外,就是應用程序被adb push you.apk /system/app/下是會自動啟動的,不處于stopped狀態(tài)。
并不太懂 我的APP啟動后 已經(jīng)收到廣播
第一種方式 我再模擬器上 測試 可以 android 9.0版本
桌面設置也會把你的app當成一個桌面主題,還有一個選項是系統(tǒng)桌面,你需要設置成自己的app
如果找不到桌面設置選項,可以從手機設置–應用程序-查看所有應用程序(包括系統(tǒng)的應用程序),找到桌面程序之類的字眼的應用,清楚其默認設置。
1、打開手機,找到手機自帶的手機管家應用,點擊進入。
2、在手機管家應用中找到應用啟動管理選項,點擊打開。
3、打開后找到全部應用管理選項,點擊打開。
4、選擇你不想開機自動啟動的軟件,點擊打開。
5、這就會打開一個菜單欄,找到允許自啟動,點擊關(guān)閉,就完成了。