LaucherActivity的源码分析和应用(非launcher桌面应用)

本文分析了Android系统中LauncherActivity的源码,探讨了启动桌面应用的过程,以及如何根据源码实现自定义LauncherActivity。通过探究intentForPosition(position)和ActivityAdapter的intentForPosition(),揭示了PackageManager在加载ActivitiesList中的作用。文章指出,自定义LauncherActivity关键在于继承并修改getTargetIntent的实现。
摘要由CSDN通过智能技术生成

一、启动初探

【要看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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hymKing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值