欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

android程序啟動,Android 啟動

Android App 開機自啟動

article class="_2rhmJa"

成都創(chuàng)新互聯(lián)公司專注于原陽網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供原陽營銷型網(wǎng)站建設(shè),原陽網(wǎng)站制作、原陽網(wǎng)頁設(shè)計、原陽網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造原陽網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供原陽網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

Android 設(shè)備開機自啟動的可以用廣播實現(xiàn),因為 Android 設(shè)備開機時會發(fā)送一條開機廣播 "android.intent.action.BOOT_COMPLETED"。接收后實現(xiàn)啟動就完成了。

接下來是準(zhǔn)備工作

如果按照上面的全部步驟后操作后,重啟沒有自動啟動程序,怎么辦呢?是怎么回事呢?

*那么首先請檢查一下你的手機是不是安裝了360等安全助手之類的軟件,如果有,請在軟件的自啟動軟件管理中將app設(shè)置為允許

*我的手機沒有安裝這些軟件,但是手機中自帶了安全助手,有的手機系統(tǒng)設(shè)置里面自帶了自啟動軟件管理的功能 ,所以在這里將我們的app設(shè)置為允許開機啟動),重啟手機,測試是否成功。

然而并沒有成功

接收不到BOOT_COMPLETED廣播可能的原因

(1)、BOOT_COMPLETED對應(yīng)的action和uses-permission沒有一起添加

(2)、應(yīng)用安裝到了sd卡內(nèi),安裝在sd卡內(nèi)的應(yīng)用是收不到BOOT_COMPLETED廣播的

(3)、系統(tǒng)開啟了Fast Boot模式,這種模式下系統(tǒng)啟動并不會發(fā)送BOOT_COMPLETED廣播

(4)、應(yīng)用程序安裝后重來沒有啟動過,這種情況下應(yīng)用程序接收不到任何廣播,包括BOOT_COMPLETED、ACTION_PACKAGE_ADDED、CONNECTIVITY_ACTION等等。

Android3.1之后,系統(tǒng)為了加強了安全性控制,應(yīng)用程序安裝后或是(設(shè)置)應(yīng)用管理中被強制關(guān)閉后處于stopped狀態(tài),在這種狀態(tài)下接收不到任何廣播,除非廣播帶有FLAG_INCLUDE_STOPPED_PACKAGES標(biāo)志,而默認(rèn)所有系統(tǒng)廣播都是FLAG_EXCLUDE_STOPPED_PACKAGES的,所以就沒法通過系統(tǒng)廣播自啟動了。所以Android3.1之后

(1)、應(yīng)用程序無法在安裝后自己啟動

(2)、沒有ui的程序必須通過其他應(yīng)用激活才能啟動,如它的Activity、Service、Content Provider被其他應(yīng)用調(diào)用。

存在一種例外,就是應(yīng)用程序被adb push you.apk /system/app/下是會自動啟動的,不處于stopped狀態(tài)。

并不太懂 我的APP啟動后 已經(jīng)收到廣播

第一種方式 我再模擬器上 測試 可以 android 9.0版本

桌面設(shè)置也會把你的app當(dāng)成一個桌面主題,還有一個選項是系統(tǒng)桌面,你需要設(shè)置成自己的app

如果找不到桌面設(shè)置選項,可以從手機設(shè)置–應(yīng)用程序-查看所有應(yīng)用程序(包括系統(tǒng)的應(yīng)用程序),找到桌面程序之類的字眼的應(yīng)用,清楚其默認(rèn)設(shè)置。

安卓應(yīng)用啟動詳解:從Zygote到你的Activity.onCreate()

翻譯自:

這篇文章講解當(dāng)用戶點擊應(yīng)用圖標(biāo)時,安卓如何啟動你的應(yīng)用。安卓系統(tǒng)做了很多幕后工作,來使得你的launch activity對用戶可見。本文通過重要階段的講解和調(diào)用序列詳細(xì)講解這一過程。

安卓應(yīng)用在這兩個方面是獨特的:

多個入口點 :Android應(yīng)用程序由不同的組件組成,它們可以調(diào)用其他應(yīng)用程序擁有的組件。這些組件大致對應(yīng)于任何應(yīng)用程序的多個入口點。因此,它們不同于具有像main()方法那樣的單個入口點的傳統(tǒng)應(yīng)用程序。

擁有自己的小世界 :每個Android應(yīng)用程序都生活在自己的世界中,它在單獨的進(jìn)程中運行,擁有自己的Dalvik VM實例,并分配有唯一的用戶ID。

必要時會啟動Android進(jìn)程。

每當(dāng)用戶或其他系統(tǒng)組件請求執(zhí)行屬于您應(yīng)用程序的組件(可能是服務(wù),活動或意圖接收器)時,Android系統(tǒng)都會為您的應(yīng)用程序啟動一個新進(jìn)程(如果尚未運行)。通常,進(jìn)程一直運行直到被系統(tǒng)殺死。應(yīng)用程序流程是按需創(chuàng)建的,在您看到應(yīng)用程序的啟動活動啟動并運行之前,發(fā)生了許多事情。

每個應(yīng)用程序都在其自己的進(jìn)程中運行 :默認(rèn)情況下,每個Android應(yīng)用程序都在其自己的Android進(jìn)程中運行,而這個進(jìn)程只不過是一個Linux進(jìn)程,而該進(jìn)程首先需要一個執(zhí)行線程。例如,當(dāng)您單擊電子郵件中的超鏈接時,網(wǎng)頁將在瀏覽器窗口中打開。您的郵件客戶端和瀏覽器是兩個單獨的應(yīng)用程序,它們分別在兩個單獨的進(jìn)程中運行。click事件使Android平臺啟動新進(jìn)程,以便它可以在其自身進(jìn)程的上下文中實例化瀏覽器活動。這對于應(yīng)用程序中的任何其他組件同樣適用。

讓我們退后一會兒,快速瀏覽一下系統(tǒng)啟動過程。與大多數(shù)基于Linux的系統(tǒng)一樣,啟動加載程序在啟動時將加載內(nèi)核并啟動init進(jìn)程。然后,init會生成稱為“守護(hù)程序”的低級Linux進(jìn)程,例如android debug守護(hù)程序,USB守護(hù)程序等。這些守護(hù)程序通常處理低級硬件接口,包括無線電接口。

然后,初始化過程會啟動一個非常有趣的過程,稱為“zygote'。

顧名思義,這是其余Android應(yīng)用程序的開始。這是初始化Dalvik虛擬機的第一個實例的過程。它還預(yù)加載Android應(yīng)用程序框架和系統(tǒng)上安裝的各種應(yīng)用程序使用的所有常見類。因此,它準(zhǔn)備進(jìn)行復(fù)制。它統(tǒng)計偵聽套接字接口上的將來請求,以產(chǎn)生新的虛擬機(VM)來管理新的應(yīng)用程序進(jìn)程。收到新請求后,它會分叉以創(chuàng)建一個新進(jìn)程,該進(jìn)程將獲取預(yù)先初始化的VM實例。

zygote之后,init啟動運行時過程。

然后zygote分叉以啟動一個名為System server的托管良好的進(jìn)程。系統(tǒng)服務(wù)器在其自己的上下文中啟動所有核心平臺服務(wù),例如活動管理器服務(wù)和硬件服務(wù)。

此時,完整的堆棧已準(zhǔn)備就緒,可以啟動第一個應(yīng)用程序流程-主頁應(yīng)用程序,該應(yīng)用程序顯示主屏幕(也稱為啟動器應(yīng)用程序)。

click事件被轉(zhuǎn)換為 startActivity(intent), 并通過Binder IPC路由到 ActivityManagerService 。ActvityManagerService執(zhí)行多個步驟

如您所見,當(dāng)用戶單擊圖標(biāo)并啟動新應(yīng)用程序時,許多事情發(fā)生在幕后。這是全圖:

流程創(chuàng)建:

ActivityManagerService 通過調(diào)用 startProcessLocked() 方法創(chuàng)建一個新進(jìn)程,該方法通過套接字連接將參數(shù)發(fā)送到Zygote進(jìn)程。Zygote派生自己并調(diào)用 ZygoteInit.main() ,然后實例化 ActivityThread 對象并返回新創(chuàng)建的進(jìn)程的進(jìn)程ID。

默認(rèn)情況下,每個進(jìn)程都有一個線程。主線程有一個 Looper 實例來處理來自消息隊列的消息,并且它在 run() 方法的每次迭代中都調(diào)用 Looper.loop() 。 Looper 的工作是從消息隊列中彈出消息并調(diào)用相應(yīng)的方法來處理它們。然后,ActivityThread通過隨后調(diào)用 Looper.prepareLoop() 和 Looper.loop()來 啟動消息循環(huán)。

以下序列詳細(xì)捕獲了調(diào)用序列:

figcaption class="jv jw di dg dh jx jy bo b fc cp ga" data-selectable-paragraph="" style="box-sizing: inherit; font-weight: 400; font-family: sohne, "Helvetica Neue", Helvetica, Arial, sans-serif; line-height: 20px; margin-left: auto; margin-right: auto; max-width: 728px; font-size: 14px; color: rgb(117, 117, 117); margin-top: 10px; text-align: center;"Android應(yīng)用啟動:單擊事件以執(zhí)行Looper調(diào)用順序/figcaption

應(yīng)用程序綁定:

下一步是將此新創(chuàng)建的過程附加到特定應(yīng)用程序。這是通過在線程對象上調(diào)用 bindApplication() 來完成的。此方法將 BIND_APPLICATION 消息發(fā)送到消息隊列。該消息由 Handler 對象檢索,該對象隨后調(diào)用 handleMessage() 方法以觸發(fā)特定于消息的操作 -handleBindApplication() 。此方法調(diào)用 makeApplication() 方法,該方法將應(yīng)用程序特定的類加載到內(nèi)存中。

下圖描述了該調(diào)用序列。

figcaption class="jv jw di dg dh jx jy bo b fc cp ga" data-selectable-paragraph="" style="box-sizing: inherit; font-weight: 400; font-family: sohne, "Helvetica Neue", Helvetica, Arial, sans-serif; line-height: 20px; margin-left: auto; margin-right: auto; max-width: 728px; font-size: 14px; color: rgb(117, 117, 117); margin-top: 10px; text-align: center;"Android應(yīng)用啟動:BIND_APPLICATION消息處理/figcaption

啟動活動:

在上一步之后,系統(tǒng)包含負(fù)責(zé)應(yīng)用程序的進(jìn)程,并將應(yīng)用程序類加載到進(jìn)程的私有內(nèi)存中。在新創(chuàng)建的流程和現(xiàn)有流程之間,啟動活動的調(diào)用順序很常見。

實際的啟動過程從 realStartActivity() 方法開始, 該 方法在應(yīng)用程序線程對象上調(diào)用 sheduleLaunchActivity() 。此方法將 LAUNCH_ACTIVITY 消息發(fā)送到消息隊列。該消息由 handleLaunchActivity() 方法處理,如下所示。

假設(shè)用戶單擊“視頻瀏覽器”應(yīng)用程序。啟動該活動的調(diào)用順序如圖所示。

figcaption class="jv jw di dg dh jx jy bo b fc cp ga" data-selectable-paragraph="" style="box-sizing: inherit; font-weight: 400; font-family: sohne, "Helvetica Neue", Helvetica, Arial, sans-serif; line-height: 20px; margin-left: auto; margin-right: auto; max-width: 728px; font-size: 14px; color: rgb(117, 117, 117); margin-top: 10px; text-align: center;"Android應(yīng)用啟動: LAUNCH_ACTIVITY消息處理 /figcaption

該活動通過 onCreate() 方法調(diào)用開始其托管生命周期。該活動通過 onRestart() 調(diào)用進(jìn)入前臺,并通過 onStart() 調(diào)用開始與用戶進(jìn)行交互。

Android啟動過程深入解析

當(dāng)按下Android設(shè)備電源鍵時究竟發(fā)生了什么?

Android的啟動過程是怎么樣的?

什么是Linux內(nèi)核?

桌面系統(tǒng)linux內(nèi)核與Android系統(tǒng)linux內(nèi)核有什么區(qū)別?

什么是引導(dǎo)裝載程序?

什么是Zygote?

什么是X86以及ARM linux?

什么是init.rc?

什么是系統(tǒng)服務(wù)?

當(dāng)我們想到Android啟動過程時,腦海中總是冒出很多疑問。本文將介紹Android的啟動過程,希望能幫助你找到上面這些問題的答案。

Android是一個基于Linux的開源操作系統(tǒng)。x86(x86是一系列的基于intel 8086 CPU的計算機微處理器指令集架構(gòu))是linux內(nèi)核部署最常見的系統(tǒng)。然而,所有的Android設(shè)備都是運行在ARM處理器(ARM 源自進(jìn)階精簡指令集機器,源自ARM架構(gòu))上,除了英特爾的Xolo設(shè)備()。Xolo來源自凌動1.6GHz x86處理器。Android設(shè)備或者嵌入設(shè)備或者基于linux的ARM設(shè)備的啟動過程與桌面版本相比稍微有些差別。這篇文章中,我將解釋Android設(shè)備的啟動過程。深入linux啟動過程是一篇講桌面linux啟動過程的好文。

當(dāng)你按下電源開關(guān)后Android設(shè)備執(zhí)行了以下步驟。

此處圖片中step2中的一個單詞拼寫錯了,Boot Loaeder應(yīng)該為Boot Loader(多謝@jameslast 提醒)

第一步:啟動電源以及系統(tǒng)啟動

當(dāng)電源按下,引導(dǎo)芯片代碼開始從預(yù)定義的地方(固化在ROM)開始執(zhí)行。加載引導(dǎo)程序到RAM,然后執(zhí)行。

第二步:引導(dǎo)程序

引導(dǎo)程序是在Android操作系統(tǒng)開始運行前的一個小程序。引導(dǎo)程序是運行的第一個程序,因此它是針對特定的主板與芯片的。設(shè)備制造商要么使用很受歡迎的引導(dǎo)程序比如redboot、uboot、qi bootloader或者開發(fā)自己的引導(dǎo)程序,它不是Android操作系統(tǒng)的一部分。引導(dǎo)程序是OEM廠商或者運營商加鎖和限制的地方。

引導(dǎo)程序分兩個階段執(zhí)行。第一個階段,檢測外部的RAM以及加載對第二階段有用的程序;第二階段,引導(dǎo)程序設(shè)置網(wǎng)絡(luò)、內(nèi)存等等。這些對于運行內(nèi)核是必要的,為了達(dá)到特殊的目標(biāo),引導(dǎo)程序可以根據(jù)配置參數(shù)或者輸入數(shù)據(jù)設(shè)置內(nèi)核。

Android引導(dǎo)程序可以在bootablebootloaderlegacyusbloader找到。

傳統(tǒng)的加載器包含的個文件,需要在這里說明:

init.s初始化堆棧,清零BBS段,調(diào)用main.c的_main()函數(shù);

main.c初始化硬件(鬧鐘、主板、鍵盤、控制臺),創(chuàng)建linux標(biāo)簽。

更多關(guān)于Android引導(dǎo)程序的可以在這里了解。

第三步:內(nèi)核

Android內(nèi)核與桌面linux內(nèi)核啟動的方式差不多。內(nèi)核啟動時,設(shè)置緩存、被保護(hù)存儲器、計劃列表,加載驅(qū)動。當(dāng)內(nèi)核完成系統(tǒng)設(shè)置,它首先在系統(tǒng)文件中尋找”init”文件,然后啟動root進(jìn)程或者系統(tǒng)的第一個進(jìn)程。

第四步:init進(jìn)程

init是第一個進(jìn)程,我們可以說它是root進(jìn)程或者說有進(jìn)程的父進(jìn)程。init進(jìn)程有兩個責(zé)任,一是掛載目錄,比如/sys、/dev、/proc,二是運行init.rc腳本。

init進(jìn)程可以在/system/core/init找到。

init.rc文件可以在/system/core/rootdir/init.rc找到。

readme.txt可以在/system/core/init/readme.txt找到。

對于init.rc文件,Android中有特定的格式以及規(guī)則。在Android中,我們叫做Android初始化語言。

Action(動作):動作是以命令流程命名的,有一個觸發(fā)器決定動作是否發(fā)生。

語法

1

2

3

4

5

; html-script: false ]

on trigger

command

command

command

Service(服務(wù)):服務(wù)是init進(jìn)程啟動的程序、當(dāng)服務(wù)退出時init進(jìn)程會視情況重啟服務(wù)。

語法

1

2

3

4

5

; html-script: false ]

service name pathname [argument]*

option

option

...

Options(選項)

選項是對服務(wù)的描述。它們影響init進(jìn)程如何以及何時啟動服務(wù)。

咱們來看看默認(rèn)的init.rc文件。這里我只列出了主要的事件以及服務(wù)。

Table

Action/Service

描述

on early-init

設(shè)置init進(jìn)程以及它創(chuàng)建的子進(jìn)程的優(yōu)先級,設(shè)置init進(jìn)程的安全環(huán)境

on init

設(shè)置全局環(huán)境,為cpu accounting創(chuàng)建cgroup(資源控制)掛載點

on fs

掛載mtd分區(qū)

on post-fs

改變系統(tǒng)目錄的訪問權(quán)限

on post-fs-data

改變/data目錄以及它的子目錄的訪問權(quán)限

on boot

基本網(wǎng)絡(luò)的初始化,內(nèi)存管理等等

service servicemanager

啟動系統(tǒng)管理器管理所有的本地服務(wù),比如位置、音頻、Shared preference等等…

service zygote

啟動zygote作為應(yīng)用進(jìn)程

在這個階段你可以在設(shè)備的屏幕上看到“Android”logo了。

第五步

在Java中,我們知道不同的虛擬機實例會為不同的應(yīng)用分配不同的內(nèi)存。假如Android應(yīng)用應(yīng)該盡可能快地啟動,但如果Android系統(tǒng)為每一個應(yīng)用啟動不同的Dalvik虛擬機實例,就會消耗大量的內(nèi)存以及時間。因此,為了克服這個問題,Android系統(tǒng)創(chuàng)造了”Zygote”。Zygote讓Dalvik虛擬機共享代碼、低內(nèi)存占用以及最小的啟動時間成為可能。Zygote是一個虛擬器進(jìn)程,正如我們在前一個步驟所說的在系統(tǒng)引導(dǎo)的時候啟動。Zygote預(yù)加載以及初始化核心庫類。通常,這些核心類一般是只讀的,也是Android SDK或者核心框架的一部分。在Java虛擬機中,每一個實例都有它自己的核心庫類文件和堆對象的拷貝。

Zygote加載進(jìn)程

加載ZygoteInit類,源代碼:/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java

registerZygoteSocket()為zygote命令連接注冊一個服務(wù)器套接字。

preloadClassed “preloaded-classes”是一個簡單的包含一系列需要預(yù)加載類的文本文件,你可以在/frameworks/base找到“preloaded-classes”文件。

preloadResources() preloadResources也意味著本地主題、布局以及android.R文件中包含的所有東西都會用這個方法加載。

在這個階段,你可以看到啟動動畫。

第六步:系統(tǒng)服務(wù)或服務(wù)

完成了上面幾步之后,運行環(huán)境請求Zygote運行系統(tǒng)服務(wù)。系統(tǒng)服務(wù)同時使用native以及java編寫,系統(tǒng)服務(wù)可以認(rèn)為是一個進(jìn)程。同一個系統(tǒng)服務(wù)在Android SDK可以以System Services形式獲得。系統(tǒng)服務(wù)包含了所有的System Services。

Zygote創(chuàng)建新的進(jìn)程去啟動系統(tǒng)服務(wù)。你可以在ZygoteInit類的”startSystemServer”方法中找到源代碼。

核心服務(wù):

啟動電源管理器;

創(chuàng)建Activity管理器;

啟動電話注冊;

啟動包管理器;

設(shè)置Activity管理服務(wù)為系統(tǒng)進(jìn)程;

啟動上下文管理器;

啟動系統(tǒng)Context Providers;

啟動電池服務(wù);

啟動定時管理器;

啟動傳感服務(wù);

啟動窗口管理器;

啟動藍(lán)牙服務(wù);

啟動掛載服務(wù)。

其他服務(wù):

啟動狀態(tài)欄服務(wù);

啟動硬件服務(wù);

啟動網(wǎng)絡(luò)狀態(tài)服務(wù);

啟動網(wǎng)絡(luò)連接服務(wù);

啟動通知管理器;

啟動設(shè)備存儲監(jiān)視服務(wù);

啟動定位管理器;

啟動搜索服務(wù);

啟動剪切板服務(wù);

啟動登記服務(wù);

啟動壁紙服務(wù);

啟動音頻服務(wù);

啟動耳機監(jiān)聽;

啟動AdbSettingsObserver(處理adb命令)。

第七步:引導(dǎo)完成

一旦系統(tǒng)服務(wù)在內(nèi)存中跑起來了,Android就完成了引導(dǎo)過程。在這個時候“ACTION_BOOT_COMPLETED”開機啟動廣播就會發(fā)出去。

Android應(yīng)用程序啟動流程總結(jié)

AMS主要功能:

AMS是Android中最核心的服務(wù),主要負(fù)責(zé)系統(tǒng)中四大組件的啟動、切換、調(diào)度及應(yīng)用進(jìn)程的管理和調(diào)度等工作。還負(fù)責(zé)啟動或殺死應(yīng)用程序的進(jìn)程。

WMS主要功能:

為所有窗口分配Surface。

管理Surface的顯示順序、尺寸、位置。

管理窗口動畫。

輸入系統(tǒng)相關(guān):WMS是派發(fā)系統(tǒng)按鍵和觸摸消息的最佳人選,當(dāng)接收到一個觸摸事件,它需要尋找一個最合適的窗口來處理消息。

PWS主要功能:

PMS 用來管理跟蹤所有應(yīng)用APK,包括安裝,卸載,解析,控制權(quán)限等。

SystemServer也是一個進(jìn)程,包括AMS、PMS、WMS等等。

zygote意為“受精卵“。Android是基于Linux系統(tǒng)的,而在Linux中,所有的進(jìn)程都是由init進(jìn)程直接或者是間接fork出來的,zygote進(jìn)程也不例外。

App進(jìn)程是用戶點擊桌面icon時,通過Launcher進(jìn)程請求SystemServer,再調(diào)用Zygote孵化的。

①點擊啟動一個App,Launcher進(jìn)程采用Binder IPC向ActivityManagerService發(fā)起startActivity請求;

②ActivityManagerService接收到請求后,向zygote進(jìn)程發(fā)送創(chuàng)建進(jìn)程的請求;

③Zygote進(jìn)程fork出新的子進(jìn)程,即App進(jìn)程;

④App進(jìn)程通過Binder IPC向sytem_server進(jìn)程發(fā)起綁定Application請求;

⑤system_server進(jìn)程在收到請求后,進(jìn)行一系列準(zhǔn)備工作后,再通過binder IPC向App進(jìn)程發(fā)送scheduleLaunchActivity請求;

⑥App進(jìn)程的binder線程(ApplicationThread)在收到請求后,通過handler向主線程發(fā)送LAUNCH_ACTIVITY消息;

⑦主線程在收到Message后,通過發(fā)射機制創(chuàng)建目標(biāo)Activity,并回調(diào)Activity.onCreate()等方法。

⑧到此,App便正式啟動,開始進(jìn)入Activity生命周期,執(zhí)行完onCreate/onStart/onResume方法,UI渲染結(jié)束后便可以看到App的主界面。

備注:

Launcher,PMS,Zygote,App進(jìn)程是三個獨立的進(jìn)程,相互通信就需要使用進(jìn)程間通信機制。與Zygote通信是使用的socket通信,Launcher,PMS,App進(jìn)程間使用的是Binder機制。

android怎么設(shè)置開機啟動軟件

Android系統(tǒng)通過應(yīng)用程序自行在系統(tǒng)中登記注冊事件(即Intent)來響應(yīng)系統(tǒng)產(chǎn)生的各類消息。

例如Android實現(xiàn)系統(tǒng)開機自啟動程需要在Manifest中加入如下Intent-filter及權(quán)限Uses-permission即可。

intent-filter

action android:name="android.intent.action.BOOT_COMPLETED"/

(修改時候主要是去掉上面該行即可)

category android:name="android.intent.category.HOME" /

/intent-filter

uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/

(修改時候主要是去掉上面該行即可) Android系統(tǒng)為應(yīng)用程序管理功能提供了大量的API,可以通過API控制Intent和permission,其中

上述配置表示應(yīng)用程序會響應(yīng)系統(tǒng)產(chǎn)生的android.intent.action.BOOT_COMPLETED(系統(tǒng)啟動完成)信號,以此來實現(xiàn)應(yīng)用程序自啟動。當(dāng)然知道上述原理后,我們就可以隨心所欲的控制程序開機自啟動了。具體思路如下:

一、手工方法

基于上述原理,我們可以通過對系統(tǒng)中已安裝的程序去除其Manifest的上述配置片段來控制應(yīng)用程序的對系統(tǒng)的響應(yīng),當(dāng)然沒源碼可修改編譯的情況下只能實現(xiàn)屏蔽其對有些信號的響應(yīng),例如屏蔽該程序不再開機自啟動。手工方法就是利用有關(guān)工具直接在解壓其APK包后,修改其Manifest的上述配置行后再打包成APK,最后安裝到系統(tǒng)中就實現(xiàn)了屏蔽其自啟動功能。具體相關(guān)的工具軟件主要有APKTOOL。(請自己放狗去搜索下載)

二、編程實現(xiàn)

當(dāng)然手工方法需要借助APKTOOL等工具,步驟比較法繁瑣,我們可以通過自己開發(fā)來實現(xiàn)該功能。幸好

1、PackageManager

本類API是對所有基于加載信息的數(shù)據(jù)結(jié)構(gòu)的封裝,包括以下功能:

·安裝,卸載應(yīng)用

·查詢permission相關(guān)信息

·查詢Application相關(guān)信息(application,activity,receiver,service,provider及相應(yīng)屬性等)

·查詢已安裝應(yīng)用

·增加,刪除permission

·清除用戶數(shù)據(jù)、緩存,代碼段等

非查詢相關(guān)的API需要特定的權(quán)限,具體的API請參考SDK文檔。

2、ActivityManager相關(guān)

本類API是對運行時管理功能和運行時數(shù)據(jù)結(jié)構(gòu)的封裝,包括以下功能

·激活/去激活activity

·注冊/取消注冊動態(tài)接受intent

·發(fā)送/取消發(fā)送intent

·activity生命周期管理(暫停,恢復(fù),停止,銷毀等)

·activity task管理(前臺-后臺,后臺-前臺,最近task查詢,運行時task查詢)

·激活/去激活service

·激活/去激活provider等

task管理相關(guān)API需要特定的權(quán)限,具體API可參考SDK文檔。

Android 設(shè)置開機自啟動

前段時間在做智能機器人等定制android系統(tǒng)開發(fā)的應(yīng)用,因為機器人定制應(yīng)用,需要在系統(tǒng)啟動的時候就運行程序,不需要展示系統(tǒng)桌面,這里需要用到系統(tǒng)開機應(yīng)用自啟動,也就是常說的開機自啟動。

記錄一下實現(xiàn)流程:

在AndroidManifest.xml文件中配置監(jiān)聽啟動權(quán)限

新建一個監(jiān)聽廣播接收者BootReceiver

安裝app到手機上,然后啟動一次程序(據(jù)說安卓4.0以后,必須先啟動一次程序才能接收到開機完成的廣播,目的是防止惡意程序)

如果按照上面的全部步驟后操作后,重啟沒有自動啟動程序,怎么辦呢?是怎么回事呢?

如果還是失敗,那么請檢查你的手機是不是設(shè)置了app安裝首選位置是sd卡,據(jù)說安裝到sd卡的話,因為手機啟動成功后(發(fā)送了啟動完成的廣播后)才加載sd卡,所以app接收不到廣播。如果是的話,把app安裝到內(nèi)部存儲試試。如果不懂得設(shè)置的話,那么直接在AndroidManifest.xml文件中設(shè)置安裝路徑,在manifest的根節(jié)點中加入 android:installLocation="internalOnly" 。如下:

文章名稱:android程序啟動,Android 啟動
鏈接URL:http://chinadenli.net/article31/dsieipd.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站App開發(fā)用戶體驗外貿(mào)網(wǎng)站建設(shè)關(guān)鍵詞優(yōu)化ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名