當前位置:首頁 » 安卓系統 » android圖標顯示

android圖標顯示

發布時間: 2023-07-24 00:28:31

⑴ Android 從點擊應用圖標到界面顯示的過程

[轉] 一篇文章看明白 Android 從點擊應用圖標到界面顯示的過程 (遵循CC 4.0 BY-SA版權協議)

從點擊桌面應用圖標到應用顯示的過程我們再熟悉不過了,下面我們來分析下這個過程都做了什麼。

本文主要對以下問題分析:

如不了解 Android 是如何從開機到 Launcher 啟動的過程,請先閱讀 Android - 系統啟動過程

我們知道 Android 系統啟動後已經啟動了 Zygote,ServiceManager,SystemServer 等系統進程;ServiceManager 進程中完成了 Binder 初始化;SystemServer 進程中 ActivityManagerService,WindowManagerService,PackageManagerService 等系統服務在 ServiceManager 中已經注冊;最後啟動了 Launcher 桌面應用。

其實 Launcher 本身就是一個應用程序,運行在自己的進程中,我們看到的桌面就是 Launcher 中的一個 Activity。

應用安裝的時候,通過 PackageManagerService 解析 apk 的 AndroidManifest.xml 文件,提取出這個 apk 的信息寫入到 packages.xml 文件中,這些信息包括:許可權、應用包名、icon、apk 的安裝位置、版本、userID 等等。packages.xml 文件位於系統目錄下/data/system/packages.xml。

同時桌面 Launcher 會為安裝過的應用生成不同的應用入口,對應桌面上的應用圖標,下面分析點擊應用圖標的到應用啟動的過程。

點擊 Launcher 中應用圖標將會執行以下方法

在 system_server 進程中的服務端 ActivityManagerService 收到 START_ACTIVITY_TRANSACTION 命令後進行處理,調用 startActivity() 方法。

從 Launcher 點擊圖標,如果應用沒有啟動過,則會 fork 一個新進程。創建新進程的時候,ActivityManagerService 會保存一個 ProcessRecord 信息,Activity 應用程序中的AndroidManifest.xml 配置文件中,我們沒有指定 Application 標簽的 process 屬性,系統就會默認使用 package 的名稱。每一個應用程序都有自己的 uid,因此,這里 uid + process 的組合就可以為每一個應用程序創建一個 ProcessRecord。每次在新建新進程前的時候會先判斷這個 ProcessRecord 是否已存在,如果已經存在就不會新建進程了,這就屬於應用內打開 Activity 的過程了。

進程創建成功切換至 App 進程,進入 app 進程後將 ActivityThread 類載入到新進程,並調用 ActivityThread.main() 方法

此時只創建了應用程序的 ActivityThread 和 ApplicationThread,和開啟了 Handler 消息循環機制,其他的都還未創建, ActivityThread.attach(false) 又會最終到 ActivityMangerService 的 attachApplication,這個工程其實是將本地的 ApplicationThread 傳遞到 ActivityMangerService。然後 ActivityMangerService 就可以通過 ApplicationThread 的代理 ApplicationThreadProxy 來調用應用程序 ApplicationThread.bindApplication,通知應用程序的 ApplicationThread 已和 ActivityMangerService 綁定,可以不藉助其他進程幫助直接通信了。此時 Launcher 的任務也算是完成了。

在 system_server 進程中的服務端 ActivityManagerService 收到 ATTACH_APPLICATION_TRANSACTION 命令後進行處理,調用 attachApplication()。

發送送完 SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION 命令,還會發送 BIND_APPLICATION_TRANSACTION 命令來創建 Application。

在 app 進程中,收到 BIND_APPLICATION_TRANSACTION 命令後調用 ActivityThread.bindApplication()。

ApplicationThreadProxy.bindApplication(…) 會傳來這個應用的一些信息,如ApplicationInfo,Configuration 等,在 ApplicationThread.bindApplication 里會待信息封裝成AppBindData,通過

將信息放到應用里的消息隊列里,通過 Handler 消息機制,在 ActivityThread.handleMeaasge 里處理 H.BIND_APPLICATION 的信息,調用 AplicationThread.handleBindApplication。

Instrumentation:

這時 Application 就創建好了,這點很重要,很多資料里說 Application 是在performLaunchActivity() 里創建的,因為 performLaunchActivity() 也有mInstrumentation.newApplication 這個調用,newApplication() 函數中可看出會先判斷是否以及創建了 Application,如果之前已經創建,就返回已創建的 Application 對象。

上面 fork 進程時會發送 SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION 命令,在 app 進程中,收到 SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION 命令後調用 ApplicationThread.scheleLaunchActivity()。

與 Window 進行關聯,具體過程詳見: Activity,Window,View 之間的關系

Activity 的整體啟動流程如圖所示:

⑵ android圖標拖動跟隨效果顯示慢

這個現象一般都是手機卡頓了
擴展:
安卓(Android)是一種基於Linux內核(不包含GNU組件)的自由及開放源代碼的操作系統。主要使用於移動設備,如智能手機和平板電腦,由美國Google公司和開放手機聯盟領導及開發。Android操作系統最初由Andy Rubin開發,主要支持手機。2005年8月由Google收購注資。2007年11月,Google與84家硬體製造商、軟體開發商及電信營運商組建開放手機聯盟共同研發改良Android系統。隨後Google以Apache開源許可證的授權方式,發布了Android的源代碼。第一部Android智能手機發布於2008年10月。Android逐漸擴展到平板電腦及其他領域上,如電視、數碼相機、游戲機、智能手錶等。2011年第一季度,Android在全球的市場份額首次超過塞班系統,躍居全球第一。 2013年的第四季度,Android平台手機的全球市場份額已經達到78.1%。2013年09月24日谷歌開發的操作系統Android在迎來了5歲生日,全世界採用這款系統的設備數量已經達到10億台。

⑶ vivos12怎麼切換安卓系統,安卓圖標沒有顯示是怎麼回事

OriginOS Ocean融合了探索桌面和經典桌面,不支持切換,如果需要在桌面上完全顯示所有應用圖標,可以進入設置--桌面、鎖屏與壁紙--桌面設置--桌面風格--設置為標准風格,另外可以長按桌面空白處--變形器--把圖標大小設置為「中/大」,可隱藏應用名字。



OriginOS 1.0系統切換桌面:
通過桌面變形器圖標,即可在OriginOS1.0系統的探索桌面和傳統桌面中一鍵切換選擇,並且共享同一套數據,不會佔用多餘空間。

熱點內容
sql語句on 發布:2025-02-05 07:41:42 瀏覽:596
取消電腦密碼怎麼設置8 發布:2025-02-05 07:24:16 瀏覽:393
洗腦編程 發布:2025-02-05 07:23:52 瀏覽:948
osd加密 發布:2025-02-05 07:17:39 瀏覽:36
微信游戲源碼下載 發布:2025-02-05 07:17:29 瀏覽:384
計算機內存儲器是 發布:2025-02-05 07:13:35 瀏覽:144
classpathlinux 發布:2025-02-05 07:12:57 瀏覽:564
linuxftp連接失敗 發布:2025-02-05 07:01:40 瀏覽:705
學生信息管理系統java 發布:2025-02-05 06:58:45 瀏覽:576
刺客信條4解壓後 發布:2025-02-05 06:55:23 瀏覽:901