一、启动初探
【要看Launcher如何启动桌面上的app的同学,请绕行,非本篇内容】
”在android手机上,当我们点击桌面上的按钮启动一个应用,就能打开应用的界面。这里我们所说的桌面其实就是android系统启动后的就已经帮我们运行的第一个程序,launcher程序。
launcher程序可以理解为作为其它应用app入口管理的一个系统自带的app,正常情况下,安装一个新的应用,就会在桌面(laucher)程序中显示一个相应的图标。
上述点击桌面上的图标打开应用的过程,本质上是通过lancher应用的提供的桌面图标启动另一个app的过程,并打开了新应用的首个Activity。
我们自己是否能开发这样的一个自定义桌面程序呢,其实是可以的。
二、Android提供的launcherActivity源码分析(基于Android10.0源码)
桌面程序就是我们平常所说的launcher程序,我们在手机桌面上看到的应用的icon,实际上是在LauncherActivity上实现的。接下来我们看launcherActivity的源代码:
/**
* Displays a list of all activities which can be performed
* for a given intent. Launches when clicked.
* 翻译:显示所有通过给定的intent能被执行的Activity列表。点击的时候启动
*/
public abstract class LauncherActivity extends ListActivity {
Intent mIntent;
PackageManager mPackageManager;//包管理器
IconResizer mIconResizer;
.....
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
//此处就是桌面图标被点击后,执行的核心代码
Intent intent = intentForPosition(position);
//调用了是Activity的startActivity方法
startActivity(intent);
}
...}
《基于android10.0源码分析Activity的启动流程》在之前写过这篇文章中,我们就是从StartActivity入手,分析了启动Activity的源码实现流程。
对于从桌面启动一个Activity本质上也是构建了一个intent去调用startActivity(intent)。这里面我们再看一下i