1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用简介 |

【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用简介 |

时间:2018-12-20 06:40:34

相关推荐

【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用简介 |

文章目录

一、 Launcher 应用简介二、 Launcher 应用源码简介三、 Launcher 图标点击方法分析

一、 Launcher 应用简介

Launcher 应用 :Android 中每个应用都是一个可执行程序 , Android 的主界面也是一个应用 , 称为 Launcher 应用 , 现在分析主界面的相关逻辑 , 进而找到应用启动的入口位置 ;

2 . 查找 Launcher 应用 :查找 使用 adb shell dumpsys activity activities 命令 , 可以查看当前的 Activity 名称 ;

$ adb shell dumpsys activity activities

3 . 查看 Launcher 应用 Activity 界面 :由输出的信息可知 , 当前运行的 Activity 叫做 NexusLauncherActivity , 该 Activity 所在的应用就是 Launcher 应用 , 用户点击该应用中的图标 , 即可跳转到系统中安装的不同应用中 ;

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 应用源码简介

1 . Launcher 应用源码位置及版本 :

① Launcher 版本 :Launcher 有 333 个版本 , 分别是 Launcher , Launcher2 , Launcher3 ;

② 源码位置 :其位置再 Android 源码路径下的 \packages\apps 目录下 ;

Launcher 版本的路径 :\packages\apps\LauncherLauncher2 版本的路径 :\packages\apps\Launcher2Launcher3 版本的路径 :\packages\apps\Launcher3

③ Launcher 版本与安卓版本对应关系 :2.1 之前使用 Launcher , 2.2 ~ 4.3 使用 Launcher2 , 4.4 以后使用 Launcher3 应用 ;

2 . Launcher2 源码分析 :

① Launcher2 应用 Activity 界面源码位置 :\packages\apps\Launcher2\src\com\android\launcher2\Launcher.java

② Launcher.java 界面 :这里分析 Launcher2 的 Launcher.java 类 , 该类就是 Android 开机后 , 看到的界面 , 在该界面中维护了所有应用的图标 , 点击图标可以进入这些 Android 应用 ;

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

三、 Launcher 图标点击方法分析

1 . Launcher 应用快捷方式图标 :这是在主界面中点击图标 , 启动安卓应用的核心方法 , 下面分析该方法的源码 ; 下图是 Launcher 界面展示 , 界面中的快捷方式图标就对应着不同的应用 ;

2 . 点击图标调用方法 :点击任意一个图标 , 都会调用如下 onClick 方法 , 传入点击的图标组件作为参数 ;

3 . 判定点击的组件是否是快捷方式图标 :检查该快捷方式组件中的 tag 标签是否属于 ShortcutInfo 快捷方式信息 , 用于甄别用户点击的是否是快捷方式图标 ; 这是 Launcher 应用启动安卓应用的核心分支 ;

if (tag instanceof ShortcutInfo) {}

4 . 判断是否是多个图标文件夹 :如果是多个应用图标的组合 , 即多个图标在一个格子中 , 走这个分支 ; 如下图中右侧的图标文件夹 , 444 个图标放在一个目录中 ;

} else if (tag instanceof FolderInfo) {

5 . 启动应用的核心代码 :在 if (tag instanceof ShortcutInfo) 分支中 , 如果点击应用图标 , 会调用 startActivitySafely 方法 , 启动应用 ;

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

6 . 完整的快捷方式图标点击方法示例 :

/*** 根据点击的快捷方式图标启动对应的应用** @param v 快捷方式图标对应的组件*/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 标签是否属于 ShortcutInfo 快捷方式信息// 用于甄别用户点击的是否是快捷方式图标 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()));// 启动快捷方式图标对应的安卓应用boolean success = startActivitySafely(v, intent, tag);if (success && v instanceof BubbleTextView) {mWaitingForResume = (BubbleTextView) v;mWaitingForResume.setStayPressed(true);}} else if (tag instanceof FolderInfo) {// 如果是多个应用图标的组合 , 即多个图标在一个格子中 , 走这个分支if (v instanceof FolderIcon) {FolderIcon fi = (FolderIcon) v;handleFolderClick(fi);}} else if (v == mAllAppsButton) {if (isAllAppsVisible()) {showWorkspace(true);} else {onClickAllAppsButton(v);}}}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。