android点击桌面的启动过程,Android App应用启动流程(一)

本篇源码分析基于Android8.0  API 26

关于Android源码查看:

你可以去看这里:https://android.googlesource.com/platform/frameworks/base/ 在线查看,也可以在Android Studio里面关联源码,也可以完全下载自己去编译

前言

其实app启动就是调用了一个startActivity,但是这个startActivity方法并没有我们想像中的那么简单,这其中牵涉到了三个进程:Zygote进程,system_server进程,还有被启动的app进程,其中还牵涉到Binder通信,AIDL,Handler机制等等,如果你把这几位搞明白再去看App启动源码,也许理解的更快一些,假如这几位你不是很理解,也是可以看app启动流程的,没准你会对他们更加感兴趣。

1,桌面图标点击

当我们点击Android系统桌面的应用图标的时候,app被启动,然后进入我们的MainActivity,呈现到用户面前,这就是App被启动了。其实桌面也只不过是一个app,它的名字叫Launcher,只不过是系统把它启动起来的,这里不关心Launcher的启动流程,只关心它里面的图标点击事件。

Launcher中的App列表使用的RecyclerView//public class AllAppsRecyclerView extends BaseRecyclerView//public abstract class BaseRecyclerView extends RecyclerView//AllAppsRecyclerView最终继承自RecyclerView

android:layout_below="@id/search_container_all_apps"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_gravity="center_horizontal|top"

android:clipToPadding="false"

android:overScrollMode="never"

android:descendantFocusability="afterDescendants"

android:focusable="true" />

这个Activity叫做Launcher.java,既然是RecyclerView,我们很自然的想到了item点击事件,item点击事件其实是对item设置的View.OnClickListener事件,恰巧Launcher实现了这个事件/**

* Default launcher application.

*/public class Launcher extends BaseActivity

implements LauncherExterns, View.OnClickListener, OnLongClickListener,                   LauncherModel.Callbacks, View.OnTouchListener, LauncherProviderChangeListener,                   AccessibilityManager.AccessibilityStateChangeListener,                   WallpaperColorInfo.OnThemeChangeListener {

那么是不是这里就是用来处理RecyclerView应用图标的点击事件呢?答案是yes

给AllAppsRecyclerView设置adapter被封装到了AllAppsContainerView里面,然后AllAppsContainerView里面mAdapter = new AllAppsGridAdapter(mLauncher, mApps, mLauncher, this);

AllAppsGridAdapter/**

* The grid view adapter of all the apps.

*/

public class AllAppsGridAdapter extends RecyclerView.Adapter {    ...

//AllAppsGridAdapter构造函数传入iconClickListener

public AllAppsGridAdapter(Launcher launcher, AlphabeticalAppsList apps, View.OnClickListener

iconClickListener, View.OnLongClickListener iconLongClickListener) {

Resources res = launcher.getResources();

mLauncher = launcher;

mApps = apps;

mEmptySearchMessage = res.getString(R.string.all_apps_loading_message);

mGridSizer = new GridSpanSizer();

mGridLayoutMgr = new AppsGridLayoutManager(launcher);

mGridLayoutMgr.setSpanSizeLookup(mGridSizer);

mLayoutInflater = LayoutInflater.from(launcher);

mIconClickListener = iconClickListener;

mIconLongClickListener = iconLongClickListener;        if (FeatureFlags.LAUNCHER3_PHYSICS) {

mSpringAnimationHandler = new SpringAnimationHandler<>(

SpringAnimationHandler.Y_DIRECTION, new AllAppsSpringAnimationFactory());

}

}    ...

@Override

public ViewHol

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值