日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用简介 | Launcher 应用源码简介 | Launcher 应用快捷方式图标点击方法分析 )

發(fā)布時(shí)間:2025/6/17 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用简介 | Launcher 应用源码简介 | Launcher 应用快捷方式图标点击方法分析 ) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、 Launcher 應(yīng)用簡(jiǎn)介
  • 二、 Launcher 應(yīng)用源碼簡(jiǎn)介
  • 三、 Launcher 圖標(biāo)點(diǎn)擊方法分析





一、 Launcher 應(yīng)用簡(jiǎn)介



Launcher 應(yīng)用 : Android 中每個(gè)應(yīng)用都是一個(gè)可執(zhí)行程序 , Android 的主界面也是一個(gè)應(yīng)用 , 稱為 Launcher 應(yīng)用 , 現(xiàn)在分析主界面的相關(guān)邏輯 , 進(jìn)而找到應(yīng)用啟動(dòng)的入口位置 ;

2 . 查找 Launcher 應(yīng)用 : 查找 使用 adb shell dumpsys activity activities 命令 , 可以查看當(dāng)前的 Activity 名稱 ;

$ adb shell dumpsys activity activities

3 . 查看 Launcher 應(yīng)用 Activity 界面 : 由輸出的信息可知 , 當(dāng)前運(yùn)行的 Activity 叫做 NexusLauncherActivity , 該 Activity 所在的應(yīng)用就是 Launcher 應(yīng)用 , 用戶點(diǎn)擊該應(yīng)用中的圖標(biāo) , 即可跳轉(zhuǎn)到系統(tǒng)中安裝的不同應(yīng)用中 ;

Running activities (most recent first):TaskRecord{64eb48e #297 I=com.google.android.apps.nexuslauncher/.NexusLauncherActivity U=0 StackId=0 sz=1}Run #0: ActivityRecord{849baf3 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t297}mResumedActivity: ActivityRecord{849baf3 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t297}mLastPausedActivity: ActivityRecord{849baf3 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t297}ResumedActivity:ActivityRecord{849baf3 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t297}ResumedActivity: ActivityRecord{849baf3 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t297}



二、 Launcher 應(yīng)用源碼簡(jiǎn)介



1 . Launcher 應(yīng)用源碼位置及版本 :


① Launcher 版本 : Launcher 有 333 個(gè)版本 , 分別是 Launcher , Launcher2 , Launcher3 ;

② 源碼位置 : 其位置再 Android 源碼路徑下的 \packages\apps 目錄下 ;

  • Launcher 版本的路徑 : \packages\apps\Launcher
  • Launcher2 版本的路徑 : \packages\apps\Launcher2
  • Launcher3 版本的路徑 : \packages\apps\Launcher3

③ Launcher 版本與安卓版本對(duì)應(yīng)關(guān)系 : 2.1 之前使用 Launcher , 2.2 ~ 4.3 使用 Launcher2 , 4.4 以后使用 Launcher3 應(yīng)用 ;



2 . Launcher2 源碼分析 :


① Launcher2 應(yīng)用 Activity 界面源碼位置 : \packages\apps\Launcher2\src\com\android\launcher2\Launcher.java

② Launcher.java 界面 : 這里分析 Launcher2 的 Launcher.java 類 , 該類就是 Android 開(kāi)機(jī)后 , 看到的界面 , 在該界面中維護(hù)了所有應(yīng)用的圖標(biāo) , 點(diǎn)擊圖標(biāo)可以進(jìn)入這些 Android 應(yīng)用 ;

public final class Launcher extends Activityimplements View.OnClickListener, OnLongClickListener, LauncherModel.Callbacks,View.OnTouchListener { }



三、 Launcher 圖標(biāo)點(diǎn)擊方法分析



1 . Launcher 應(yīng)用快捷方式圖標(biāo) : 這是在主界面中點(diǎn)擊圖標(biāo) , 啟動(dòng)安卓應(yīng)用的核心方法 , 下面分析該方法的源碼 ; 下圖是 Launcher 界面展示 , 界面中的快捷方式圖標(biāo)就對(duì)應(yīng)著不同的應(yīng)用 ;


2 . 點(diǎn)擊圖標(biāo)調(diào)用方法 : 點(diǎn)擊任意一個(gè)圖標(biāo) , 都會(huì)調(diào)用如下 onClick 方法 , 傳入點(diǎn)擊的圖標(biāo)組件作為參數(shù) ;


3 . 判定點(diǎn)擊的組件是否是快捷方式圖標(biāo) : 檢查該快捷方式組件中的 tag 標(biāo)簽是否屬于 ShortcutInfo 快捷方式信息 , 用于甄別用戶點(diǎn)擊的是否是快捷方式圖標(biāo) ; 這是 Launcher 應(yīng)用啟動(dòng)安卓應(yīng)用的核心分支 ;

if (tag instanceof ShortcutInfo) {}

4 . 判斷是否是多個(gè)圖標(biāo)文件夾 : 如果是多個(gè)應(yīng)用圖標(biāo)的組合 , 即多個(gè)圖標(biāo)在一個(gè)格子中 , 走這個(gè)分支 ; 如下圖中右側(cè)的圖標(biāo)文件夾 , 444 個(gè)圖標(biāo)放在一個(gè)目錄中 ;

} else if (tag instanceof FolderInfo) {


5 . 啟動(dòng)應(yīng)用的核心代碼 : if (tag instanceof ShortcutInfo) 分支中 , 如果點(diǎn)擊應(yīng)用圖標(biāo) , 會(huì)調(diào)用 startActivitySafely 方法 , 啟動(dòng)應(yīng)用 ;

boolean success = startActivitySafely(v, intent, tag);

6 . 完整的快捷方式圖標(biāo)點(diǎn)擊方法示例 :

/*** 根據(jù)點(diǎn)擊的快捷方式圖標(biāo)啟動(dòng)對(duì)應(yīng)的應(yīng)用** @param v 快捷方式圖標(biāo)對(duì)應(yīng)的組件*/public void onClick(View v) {// Make sure that rogue clicks don't get through while allapps is launching, or after the// view has detached (it's possible for this to happen if the view is removed mid touch).if (v.getWindowToken() == null) {return;}if (!mWorkspace.isFinishedSwitchingState()) {return;}Object tag = v.getTag();// 檢查該快捷方式組件中的 tag 標(biāo)簽是否屬于 ShortcutInfo 快捷方式信息// 用于甄別用戶點(diǎn)擊的是否是快捷方式圖標(biāo) if (tag instanceof ShortcutInfo) {// Open shortcutfinal Intent intent = ((ShortcutInfo) tag).intent;int[] pos = new int[2];v.getLocationOnScreen(pos);intent.setSourceBounds(new Rect(pos[0], pos[1],pos[0] + v.getWidth(), pos[1] + v.getHeight()));// 啟動(dòng)快捷方式圖標(biāo)對(duì)應(yīng)的安卓應(yīng)用boolean success = startActivitySafely(v, intent, tag);if (success && v instanceof BubbleTextView) {mWaitingForResume = (BubbleTextView) v;mWaitingForResume.setStayPressed(true);}} else if (tag instanceof FolderInfo) {// 如果是多個(gè)應(yīng)用圖標(biāo)的組合 , 即多個(gè)圖標(biāo)在一個(gè)格子中 , 走這個(gè)分支if (v instanceof FolderIcon) {FolderIcon fi = (FolderIcon) v;handleFolderClick(fi);}} else if (v == mAllAppsButton) {if (isAllAppsVisible()) {showWorkspace(true);} else {onClickAllAppsButton(v);}}}

總結(jié)

以上是生活随笔為你收集整理的【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用简介 | Launcher 应用源码简介 | Launcher 应用快捷方式图标点击方法分析 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。