Android Framework分析Launcher启动过程

您所在的位置:网站首页 ui设计启动图标 Android Framework分析Launcher启动过程

Android Framework分析Launcher启动过程

2023-06-22 14:23| 来源: 网络整理| 查看: 265

在这里插入图片描述

简介:

Launcher是Android系统中默认的桌面应用程序,负责管理设备的屏幕和应用程序图标。本文将详细介绍Launcher的启动过程,并使用源代码示例进行说明。

Launcher的启动过程:

下面是Launcher的启动过程的详细步骤:

由系统框架启动应用程序进程。

Launcher是Android系统默认的应用程序,它会在系统启动时被自动加载。与其他应用程序一样,它是由系统框架启动的。系统框架会加载以"com.android.launcher3.Launcher"为启动器的类,然后启动Launcher应用程序。

加载应用程序主入口函数。

在Launcher应用程序启动时,系统框架会加载应用程序主入口函数。这个函数负责初始化Launcher应用程序并为用户提供UI界面。

加载主Activity。

主Activity是指Launcher应用程序中的MainActivity,它是应用程序的入口点。系统框架会实例化MainActivity并调用其onCreate()方法。

加载设计资源。

Launcher应用程序中的设计资源是指应用程序的UI元素,例如:图标、背景、字体等资源。这些资源是在应用程序启动时加载的,并用于构建应用程序的UI界面。

加载布局文件。

Launcher应用程序中的布局文件包含了应用程序的UI元素的结构和排列方式。这些布局文件是在应用程序启动时加载的,并用于构建应用程序的UI界面。

加载LauncherModel。

LauncherModel是Launcher应用程序的数据模型。它负责管理设备上所有应用程序的图标和应用程序的位置。LauncherModel还负责从系统资源中获取新安装的应用程序,并将其更新到Launcher中。

下面是LauncherModel的构造函数的源代码示例:

public LauncherModel(LauncherAppState app) { // Load configuration from a different thread. mApp = app; mIconCache = app.getIconCache(); mBgAllAppsList = new DeferredHandler(); mWorkerHandlerThread = new HandlerThread("launcher-loader"); mWorkerHandlerThread.start(); mWorkerHandler = new WorkerHandler(mWorkerHandlerThread.getLooper()); mModelCache = new LoaderResultsCache(this); } 加载界面布局。

Launcher应用程序中的UI布局是通过加载Fragment获得的。Launcher应用程序中有多个Fragment,包括:工作区、小部件和小部件配置屏幕等。Fragment以类似Activity的方式加载。系统框架会加载包含这些Fragment的布局资源,并在应用程序启动时使用这些资源。

下面是Launcher应用程序中加载工作区的源代码示例:

private void populateWorkspace() { Runnable r = new Runnable() { public void run() { mWorkspace.loadUserItems(false); if (mSynchronouslyBound) { mSynchronouslyBound = false; mDragLayer.onAppsBound(); mWorkspace.post(new Runnable() { public void run() { mOverlayDrawer.startDiscoveryAnimation(); } }); } } }; runOnMainThread(r, BIND_WORKSPACE_SCREEN_TIMEOUT_SECONDS); } 加载小部件。

小部件是常驻应用程序,它们在设备上运行并提供有用的功能。Launcher应用程序中的小部件在应用程序启动时加载。这些小部件的位置和大小信息存储在LauncherModel中。

下面是Launcher应用程序中加载小部件的源代码示例:

private void populateAppWidgetHostView(AppWidgetHostView view, ItemInfo info, LauncherAppWidgetProviderInfo appWidgetInfo) { view.setAppWidget(appWidgetInfo); view.setTag(info); info.applyFromAppWidgetProviderInfo(appWidgetInfo); view.setVisibility(View.VISIBLE); } 加载小部件配置屏幕。

小部件配置屏幕是一个用于管理和配置小部件的界面。在Launcher应用程序启动时,会检查是否需要打开小部件配置屏幕。如果需要,系统框架会加载小部件配置屏幕并启动它。

下面是Launcher应用程序中打开小部件配置屏幕的源代码示例:

private void showAllApps(boolean animated, boolean fromHome) { if (mState == State.APPS_SPRING_LOADED || mState == State.APPS_SPRING_LOADED_HIGHLIGHTED) { return; } if (mState == State.WORKSPACE) { mWorkspace.setVisibility(View.INVISIBLE); } mStateTransitionAnimation = animated; if (mState != State.WORKSPACE_HIDDEN) { if (AppsCustomizePagedView.DISABLE_ALL_APPS) { showWorkspace(animated); } else { showAppsCustomizeHelper(animated, false, fromHome); } } } 启动应用程序。

Launcher应用程序中的应用程序图标是一个View对象。当用户点击应用程序图标时,系统框架会启动指定的应用程序并将其显示在屏幕上。

下面是Launcher应用程序中启动应用程序的源代码示例:

private void startActivitySafely(View v, Intent intent, ItemInfo item) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (item != null && item instanceof ShortcutInfo) { int[] pos = new int[2]; v.getLocationOnScreen(pos); intent.putExtra(EXTRA_SHORTCUT_ID, ((ShortcutInfo)item).id); intent.putExtra(EXTRA_SHORTCUT_INTENT, intent); intent.putExtra(EXTRA_SHORTCUT_ICON_RESOURCE, ((ShortcutInfo)item).iconResource); intent.putExtra(EXTRA_SHORTCUT_ICON, ((ShortcutInfo)item).iconBitmap); intent.putExtra(EXTRA_SHORTCUT_ICON_PACKAGE, ((ShortcutInfo)item).iconResource.packageName); intent.putExtra(EXTRA_SHORTCUT_ICON_RESOURCE_TYPE, ((ShortcutInfo)item).iconResource.resourceTypeName); intent.putExtra(EXTRA_SHORTCUT_ADDED_TO_HOME, ((ShortcutInfo)item).isAddedToHome()); intent.putExtra(EXTRA_ANIMATED_THUMBNAIL, mDragLayer.getAnimatedIconBitmap()); intent.putExtra(EXTRA_CONTROLLER, mStats); intent.putExtra(EXTRA_DOWN_AND_OUT, true); intent.putExtra(EXTRA_PROFILE, mUser); intent.putExtra(EXTRA_DIRECT_CALL_SHORTCUT, true); intent.putExtra(EXTRA_ANIM_SCALE_FACTOR, mZoomScale); intent.putExtra(EXTRA_DRAG_SOURCE_Y_OFFSET, mIconDragEvent.getY() - (mDragLayer.getInsets().top - mWorkspace.getInsets().top + pos[1])); } mStats.recordLaunch(intent, item); getContext().startActivity(intent); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3