導航:首頁 > 操作系統 > android執行流程

android執行流程

發布時間:2023-08-26 03:39:51

① 如何在電腦上運行安卓程序

搞安卓的程序開發,其中很重要的一環就是測試軟體,而我們不可能時常把手機連接到電腦上,那麼如何在電腦上運行安卓程序呢?下文我就分享了在電腦上運行安卓程序的 方法 ,希望對大家有所幫助。

在電腦上運行安卓程序方法

一、安裝java環境

進Java官方網站里下載JDK,雙擊運行jdk-6u20-windows-i586.exe,假設選擇安裝到C:Javajdk1.6.0_20目錄下(當然,安裝到默認路徑下也沒有問題)。安裝完畢後,就是配置環境變數。步驟如下:

(1)設置JAVA路徑

在“我的電腦”上點右鍵,選“屬性”,打開“系統屬性”對話框,點“高級”選項卡,再點“環境變數”按鈕,在打開的對話框中的“系統變數”下方,點“新建”,然後在對話框中的“變數名”中填JAVA_HOME,在“變數值”中填C:Javajdk1.6.0_20,點“確定”。

(2)設置CLASS路徑

再“新建”一個系統變數,在“變數名”中填CLASSPATH,在“變數值”中填.;%JAVA_HOME%lib;%JAVA_HOME%lib ools.jar。

說明:最開始的.;中的.(點)表示當前路徑,;(分號)是路徑分隔符。接下來的%JAVA_HOME%引用的是前面剛創建的JAVA安裝路徑。

(3)設置PATH路徑

PATH變數一般都有了,因此選中點“編輯”,然後在“變數值”後面加上;%JAVA_HOME%in;%JAVA_HOME%jrein,注意前面的分號。

這樣,JDK就安裝好。“開始->運行”,輸入cmd,然後在命令行提示符中輸入:java -version,應該能夠看到java version “1.6.0_20″信息;JDK安裝成功。

二、安裝android環境

下載Android SDK 1.5(android-sdk-windows-1.6_r1.zip),解壓縮到C:android-sdk-windows-1.6_r1目錄中(解壓到哪個目錄都沒有問題)。然後,配置環境變數。步驟如下:

(1)設置Android路徑

重復第一步的(1),新建一個“系統變數”,在“變數名”中填Android_Home(大小寫沒有問題),在“變數值”加填C:android-sdk-windows-1.6_r1。

(2)設置PATH路徑

“編輯”PATH變數,在“變數值”後面加上;%Android_Home% ools,注意前面的分號。

這樣,Android SDK 1.6就安裝好了。“開始->運行”,輸入cmd,然後在命令行提示符中輸入:android -help,應該能夠看到幫助信息;Android SDK 1.6安裝成功。

三、安裝Android模擬器

下載Android SDK Setup ,解壓縮到C:android-sdk-windows,然後進入這個文件夾,雙擊SDK Setup.exe,啟動Android SDK and AVD Manager,選中左側Settings項,然後在右側面板選中Force https://… sources to be fetched using http://,然後選擇Save & Apply

選擇”installed package”,安裝相應的Android版本:安裝時間可能較長,可以選擇合適的Android版本就可以了,比如2.2

然後進入virtual devices新建模擬器,選擇對應的Android版本,然後尺寸一般選擇HVGA即可。

點擊Create AVD即創建模擬器成功,然後返回模擬器列表選擇start啟動模擬器

四、安裝軟體

下面就是重頭戲了,也就是在模擬器上安裝apk軟體。

點擊電腦“開始”菜單裡面的“運行”輸入cmd,如果是 windows7 則直接在開始菜單里的搜索框中輸入cmd並回車。

把下載好的APK文件復制到模擬器的安裝地址中的Tools目錄下,例如:“D:android-sdk-windows ools”。下載後的APK文件可以改個簡短好記的名字,例如:game.apk

然後點擊Tools目錄下的emulator.exe,點擊後看到程序運行一閃而過,ok,這就行了。

在cmd命令窗口中輸入cd d:回車(同理,如果你模擬器安裝在E盤或別的硬碟根目錄下,這里d就更換成e或別的硬碟名。這個就不再提醒了。)

再輸入d:回車

繼續輸入cd D:android-sdk-windows ools回車(寫到這里時,我自己電腦上的模擬器安裝目錄變了,變成android了。大家湊合看看圖吧,把圖片中的“android”換成你自己模擬器的安裝目錄就ok,這個就不用我再多說了吧?)

最後輸入adb install game.apk回車(這里game.apk就是我們下載並復制到tools目錄下的apk文件名)

Ok,,這樣我們就成功的在模擬器上安裝好了軟體。切換回模擬器,就能找到該軟體了。簡單吧?你也趕緊來試試吧。

如何在電腦上運行安卓程序相關 文章 :

1. 在電腦上安裝安卓系統的方法

2. 電腦如何安裝安卓系統

3. 如何在電腦上安裝安卓系統

4. 怎麼在Win7電腦玩安卓游戲

5. 安卓程序員必備的開發工具

6. Win10電腦怎樣使用安卓模擬器

② Android 10.0 ActivityManagerService的啟動流程

我們講完了SystemServer的啟動過程,本節主要來講解ActivityManagerService的啟動過程。ActivityManagerService簡稱AMS,管理Activity行為,控制Activity的生命周期,派發消息事件,內存管理等功能。

ActivityManagerService啟動由SystemServer中startBootstrapService啟動

ATM啟動最終調用的是ActivityTaskManagerService.Lifecycle.onStart()來啟動ATM服務的
源碼:ActivityTaskManagerService.java#Lifecycle.class

將ActivityTaskManagerInternal添加到本地服務的全局注冊表中。
ActivityTaskManagerInternal為抽象類,其實現類為ActivityTaskManagerService#LocalService.class

構造函數初始化主要工作就是初始化一些變數,供之後的service,broadcast,provider的管理和調度

start中做了兩件事

AMS的systemReady處理分為三個階段

同時獲取一些配置參數。 需要注意的是,由於只有Java進程才會向AMS注冊,而一般的Native進程不會向AMS注冊,因此此處殺死的進程是Java進程。

主要是調用一些關鍵服務的初始化函數,然後殺死那些沒有FLAG_PERSISTENT 卻在AMS啟動完成前已經存在的進程,同時獲取一些配置參數。需要注意的是,由於只有Java進程才會向AMS注冊,而一般的Native進程不會向AMS注冊,因此此處殺手的進程是Java進程。

執行goingCallback的處理,主要的工作就是通知一些服務可以進行systemReady相關的工作,並進行啟動服務或應用進程的工作

監控Native的crash,啟動WebView,執行一些服務的systemReady和systemRunning方法

啟動Home Activity,當啟動結束,發送ACTION_BOOT_COMPLETED廣播時,AMS的啟動過程告一段落

啟動Home Activity

AMS的啟動主要經歷了如下幾個階段:

③ 求講解一下安卓運行一個APP的詳細過程

android運行app的過程:
1、用戶打開一個app。
2、系統分配程序預設要求的最低內存,並創建activity進程。
3、進程創建完畢後,app程序被轉移至虛擬機中。
4、app程序到達虛擬機後運行第一條啟動指令,一般為顯示啟動logo。
5、啟動後依據用戶的操作來完成程序。
6、用戶關閉app。
7、系統將程序移除虛擬機,並結束activity進程。
8、釋放佔用的內存。

④ Android應用程序啟動流程總結

AMS主要功能:
AMS是Android中最核心的服務,主要負責系統中四大組件的啟動、切換、調度及應用進程的管理和調度等工作。還負責啟動或殺死應用程序的進程。

WMS主要功能:
為所有窗口分配Surface。
管理Surface的顯示順序、尺寸、位置。
管理窗口動畫。
輸入系統相關:WMS是派發系統按鍵和觸摸消息的最佳人選,當接收到一個觸摸事件,它需要尋找一個最合適的窗口來處理消息。

PWS主要功能:
PMS 用來管理跟蹤所有應用APK,包括安裝,卸載,解析,控制許可權等。

SystemServer也是一個進程,包括AMS、PMS、WMS等等。

zygote意為「受精卵「。Android是基於Linux系統的,而在Linux中,所有的進程都是由init進程直接或者是間接fork出來的,zygote進程也不例外。

App進程是用戶點擊桌面icon時,通過Launcher進程請求SystemServer,再調用Zygote孵化的。

①點擊啟動一個App,Launcher進程採用Binder IPC向ActivityManagerService發起startActivity請求;

②ActivityManagerService接收到請求後,向zygote進程發送創建進程的請求;

③Zygote進程fork出新的子進程,即App進程;

④App進程通過Binder IPC向sytem_server進程發起綁定Application請求;

⑤system_server進程在收到請求後,進行一系列准備工作後,再通過binder IPC向App進程發送scheleLaunchActivity請求;

⑥App進程的binder線程(ApplicationThread)在收到請求後,通過handler向主線程發送LAUNCH_ACTIVITY消息;

⑦主線程在收到Message後,通過發射機制創建目標Activity,並回調Activity.onCreate()等方法。

⑧到此,App便正式啟動,開始進入Activity生命周期,執行完onCreate/onStart/onResume方法,UI渲染結束後便可以看到App的主界面。

備註:
Launcher,PMS,Zygote,App進程是三個獨立的進程,相互通信就需要使用進程間通信機制。與Zygote通信是使用的socket通信,Launcher,PMS,App進程間使用的是Binder機制。

⑤ Android 10.0 Activity的啟動流程

本文主要學習記錄,基於Android 10的源碼,有錯誤歡迎指正,主要目的是梳理流程圖。

以進程為單位的調用棧圖如下:

1.activity中的startActivity方法最終都會通過拿到ATSM的代理IActivityTaskManager調用的startActivity;

2.之後進入system server進程中的ATMS startActivity,ATMS 經過收集Intent信息,然後使用ActivityStackSupervisor.startSpecificActivityLocked,如果進程已經存在,則直接使用realStartActivityLocked,通過App的binder客戶端的代理ApplicationThread調用回到bindApplication,走入Activity的啟動流程;如果進程不存在則通過socket鏈接Zygote,請求fork新的進程;

3.App進程創建完成後,進程啟動會調用ActivityThread.main方法,初始化主線程Handler,接著走入attach方法,然後通過AMS的代理調用AMS的attachApplication方法,並將App進程的通信代理ApplicationThread傳入AMS;

4.AMS獲取到ATMS調用ApplicationThread的bindApplication回到App進程的ActivityThread.ApplicationThread.bindApplication方法中,然後使用Handler切換到主線程執行handleBindApplication,這里初始化了App的進程名字、時間,用戶的硬體配置,包括App的文件系統,創建了App的Context實例,Instrumentation實例,調用App的onCreate回調方法,同時告訴AMS APP初始化工作完畢;

5.AMS接著會調用ATMS的attachApplication,最後調用ClientLifecycleManager的scheleTransaction方法,通過App的Binder代理ApplicationThread回到ActivityThread;

6.進入ActivityThread.ApplicationThread.scheleTransaction方法之後就進入了Activity的onStart、onResume回調

創建進程之前的過程主要是AMS的內部信息收集的判斷的過程,下面主要看一下App進程啟動的源碼流程

從應用進程被創建開始,ActivityThread.main被執行

調用ActivityThread的attach方法,然後將activity和AMS通信的Binder代理IApplicationThread實例傳入AMS

接著進入AMS進程,ActivityManagerService.attachApplicationLocked

1.thread.bindApplication :該方法主要講App進程的配置信息通過IApplicationThread Binder通信回傳到ActivityThread中

2.mAtmInternal.attachApplication :mAtmInternal實際就是ActivityTaskManager的實例,通過LocalServices載入

那麼這里相當於走到了ActivityTaskManagerServer的attachApplication中

先看第一條:

注意:ActivityThread中存在於Binder通信的代理--》ApplicationThread extends IApplicationThread.Stub

ActivityThread--》ApplicationThread--》bindApplication

這里的bindApplication主要初始化了AppBindData,然後發送BIND_APPLICATION給APP的主線程BIND_APPLICATION,最後執行了handleBindApplication

handleBindApplication如下:

ActivityThread--》class H extends Handler

該方法主要在App進程中對App的一些硬體資源配置申請的屬性、App的文件夾等完成App基本信息的初始化

接著看第二條:mAtmInternal.attachApplication

mAtmInternal.attachApplication最終會調用mRootActivityContainer.attachApplication(wpc)

RootActivityContainer.attachApplication

接著調用ActivityStackSupervisor.realStartActivityLocked開始創建Activity

ActivityStackSupervisor.realStartActivityLocked

創建ClientLifecycleManager和ClientTransactionHandler來輔助管理Activity的生命周期

注意

clientTransaction.addCallback是LaunchActivityItem

lifecycleItem是ResumeActivityItem

ClientLifecycleManager.scheleTransaction最終會調用ClientTransaction的schele方法

那麼這個mClient是IApplicationThread的實例,那麼此時也就回到了ActivityThread的ApplicationThread中

ActivityThread的ApplicationThread中

因為ActivityThread繼承ClientTransactionHandler,所以到了ClientTransactionHandler中

通過Handler發送消息EXECUTE_TRANSACTION到H中

接著TransactionExecutor的execute方法

LaunchActivityItem.execute方法

client其實是在ActivityThread的實例,那麼就回到了ActivityThread的handleLaunchActivity

接著調用performLaunchActivity

在performLaunchActivity中,主要是載入App的資源包,然後創建了Activity的context實例,並創建了Activity的實例,接著調用activity.attach方法,attach執行完之後調用了onCreate方法。

activity.attach

activity.attach中主要

1.創建了PhoneWindow實例

2.設置了Window介面的監聽

3.初始化了成員變數,包括線程和WindowManager

到此Oncreate已經完成,那麼OnStart和OnResume去哪了?

TransactionExecutor的execute方法

之前們只分析了executeCallbacks,接著executeLifecycleState方法

TransactionExecutor的executeLifecycleState方法

cycleToPath:lifecycleItem即為ResumeActivityItem

第一點:

int finish = lifecycleItem.getTargetState()

lifecycleItem對應ResumeActivityItem,如下:

ResumeActivityItem的getTargetState方法

對應ActivityLifecycleItem中的枚舉類型:

第二點:ActivityClientRecord中的mLifecycleState,由於在前面已經執行了handleLaunchActivity所以mLifecycleState=1

對應ActivityLifecycleItem中的枚舉類型:

PRE_ON_CREATE = 0

所以final int star = 1

接著看getLifecyclePath,此時start=1,finish=3

那麼返回的IntArray就是2

接著看performLifecycleSequence

最終執行的是handleStartActivity所以最終走到了ActivityThread的handleResumeActivity

兩點:

調用activity.performStart

調用Instrumetation.callActivityOnPostCreate

performStart方法:

調用了Instrumentation.callActivityOnStart方法:

最終到了activity的onStart方法

第二點:Instrumentation.callActivityOnPostCreate

上面主要走了cycleToPath,接著ResumeActivityItem.execute

調用了handleResumeActivity方法

handleResumeActivity最終調用performResumeActivity

調用了Instrumentation.callActivityOnResume,

到了activity.onResume()方法

參考文章: https://blog.csdn.net/u011386173/article/details/87802765

⑥ Android App安裝以及啟動流程

Android App的安裝可以分為有界面的安裝和無界面的安裝。

有界面的安裝其實就是調用系統App(PackageInstaller)咐碼去安裝apk,打開安裝apk應用之後,點擊安裝按鈕執行startInstall方法,然後就進入安裝中界面開始安裝,安裝成功或者衡族哪失敗都會有對應的回調。內部其實也是使用PackageManager的installExistingPackage方法,通過binder機制,調用到PackageManagerService的installExistingPackage方法,最終調用到installExistingPackageAsUser方法安裝,而 安裝的核心原理其實就是將apk文件拷貝到系統可識別的重要的文件目錄

無界面安裝是調用adb命令,執行到一個c寫的commandline腳本,調用 install_app 方法,然後再調用 pm_command ,然後執行到pm腳本,執行 run 方法,調用 runinstall ,然後調用 installPackageAsUser 通過AMS執行安裝。

說到App的啟動,就需要從穗則開機開始說起,Android開機會先把所有應用安裝一遍就是把apk拷貝到對應的目錄(這也是Android開機慢的原因)。

整個流程如下:

其實App的啟動,除了剛開機是不一樣之外,正常時候基本與Activity的啟動非常接近。

閱讀全文

與android執行流程相關的資料

熱點內容
教育系統源碼達標 瀏覽:884
音效卡驅動安裝程序在哪個文件夾 瀏覽:56
錢還完了銀行不給解壓 瀏覽:169
linux的系統調用表 瀏覽:750
php怎麼轉換頁面 瀏覽:546
我的世界買了伺服器之後怎麼開服 瀏覽:828
r1234yf汽車空調壓縮機 瀏覽:145
ftp伺服器地址欄 瀏覽:900
linux圖形分區 瀏覽:965
安徽到遼寧源碼 瀏覽:577
libs安卓的文件夾叫什麼 瀏覽:871
生意圈app是什麼意思 瀏覽:397
linuxarcgisserver 瀏覽:234
加密pdf怎麼修改文件 瀏覽:138
紅米刷機無命令怎麼辦 瀏覽:356
啥叫美國谷歌外包程序員 瀏覽:260
雲伺服器管家婆 瀏覽:440
發郵件命令 瀏覽:354
程序員好做嗎工作好嗎 瀏覽:886
雲電腦伺服器維護一個月多少錢 瀏覽:882