当前位置:首页 » 安卓系统 » android图标显示

android图标显示

发布时间: 2023-07-24 00:28:31

⑴ Android 从点击应用图标到界面显示的过程

[转] 一篇文章看明白 Android 从点击应用图标到界面显示的过程 (遵循CC 4.0 BY-SA版权协议)

从点击桌面应用图标到应用显示的过程我们再熟悉不过了,下面我们来分析下这个过程都做了什么。

本文主要对以下问题分析:

如不了解 Android 是如何从开机到 Launcher 启动的过程,请先阅读 Android - 系统启动过程

我们知道 Android 系统启动后已经启动了 Zygote,ServiceManager,SystemServer 等系统进程;ServiceManager 进程中完成了 Binder 初始化;SystemServer 进程中 ActivityManagerService,WindowManagerService,PackageManagerService 等系统服务在 ServiceManager 中已经注册;最后启动了 Launcher 桌面应用。

其实 Launcher 本身就是一个应用程序,运行在自己的进程中,我们看到的桌面就是 Launcher 中的一个 Activity。

应用安装的时候,通过 PackageManagerService 解析 apk 的 AndroidManifest.xml 文件,提取出这个 apk 的信息写入到 packages.xml 文件中,这些信息包括:权限、应用包名、icon、apk 的安装位置、版本、userID 等等。packages.xml 文件位于系统目录下/data/system/packages.xml。

同时桌面 Launcher 会为安装过的应用生成不同的应用入口,对应桌面上的应用图标,下面分析点击应用图标的到应用启动的过程。

点击 Launcher 中应用图标将会执行以下方法

在 system_server 进程中的服务端 ActivityManagerService 收到 START_ACTIVITY_TRANSACTION 命令后进行处理,调用 startActivity() 方法。

从 Launcher 点击图标,如果应用没有启动过,则会 fork 一个新进程。创建新进程的时候,ActivityManagerService 会保存一个 ProcessRecord 信息,Activity 应用程序中的AndroidManifest.xml 配置文件中,我们没有指定 Application 标签的 process 属性,系统就会默认使用 package 的名称。每一个应用程序都有自己的 uid,因此,这里 uid + process 的组合就可以为每一个应用程序创建一个 ProcessRecord。每次在新建新进程前的时候会先判断这个 ProcessRecord 是否已存在,如果已经存在就不会新建进程了,这就属于应用内打开 Activity 的过程了。

进程创建成功切换至 App 进程,进入 app 进程后将 ActivityThread 类加载到新进程,并调用 ActivityThread.main() 方法

此时只创建了应用程序的 ActivityThread 和 ApplicationThread,和开启了 Handler 消息循环机制,其他的都还未创建, ActivityThread.attach(false) 又会最终到 ActivityMangerService 的 attachApplication,这个工程其实是将本地的 ApplicationThread 传递到 ActivityMangerService。然后 ActivityMangerService 就可以通过 ApplicationThread 的代理 ApplicationThreadProxy 来调用应用程序 ApplicationThread.bindApplication,通知应用程序的 ApplicationThread 已和 ActivityMangerService 绑定,可以不借助其他进程帮助直接通信了。此时 Launcher 的任务也算是完成了。

在 system_server 进程中的服务端 ActivityManagerService 收到 ATTACH_APPLICATION_TRANSACTION 命令后进行处理,调用 attachApplication()。

发送送完 SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION 命令,还会发送 BIND_APPLICATION_TRANSACTION 命令来创建 Application。

在 app 进程中,收到 BIND_APPLICATION_TRANSACTION 命令后调用 ActivityThread.bindApplication()。

ApplicationThreadProxy.bindApplication(…) 会传来这个应用的一些信息,如ApplicationInfo,Configuration 等,在 ApplicationThread.bindApplication 里会待信息封装成AppBindData,通过

将信息放到应用里的消息队列里,通过 Handler 消息机制,在 ActivityThread.handleMeaasge 里处理 H.BIND_APPLICATION 的信息,调用 AplicationThread.handleBindApplication。

Instrumentation:

这时 Application 就创建好了,这点很重要,很多资料里说 Application 是在performLaunchActivity() 里创建的,因为 performLaunchActivity() 也有mInstrumentation.newApplication 这个调用,newApplication() 函数中可看出会先判断是否以及创建了 Application,如果之前已经创建,就返回已创建的 Application 对象。

上面 fork 进程时会发送 SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION 命令,在 app 进程中,收到 SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION 命令后调用 ApplicationThread.scheleLaunchActivity()。

与 Window 进行关联,具体过程详见: Activity,Window,View 之间的关系

Activity 的整体启动流程如图所示:

⑵ android图标拖动跟随效果显示慢

这个现象一般都是手机卡顿了
扩展:
安卓(Android)是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机、智能手表等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。

⑶ vivos12怎么切换安卓系统,安卓图标没有显示是怎么回事

OriginOS Ocean融合了探索桌面和经典桌面,不支持切换,如果需要在桌面上完全显示所有应用图标,可以进入设置--桌面、锁屏与壁纸--桌面设置--桌面风格--设置为标准风格,另外可以长按桌面空白处--变形器--把图标大小设置为“中/大”,可隐藏应用名字。



OriginOS 1.0系统切换桌面:
通过桌面变形器图标,即可在OriginOS1.0系统的探索桌面和传统桌面中一键切换选择,并且共享同一套数据,不会占用多余空间。

热点内容
java16进制字符串 发布:2025-02-05 10:38:13 浏览:643
创业团队配置有哪些 发布:2025-02-05 10:37:40 浏览:630
王者键盘怎么设置安卓 发布:2025-02-05 10:32:01 浏览:373
阿里云轻量服务器ip搭建 发布:2025-02-05 10:24:46 浏览:486
编程高精度 发布:2025-02-05 10:22:28 浏览:230
使命召唤如何配置爆炸狙 发布:2025-02-05 10:08:12 浏览:143
java访问共享目录 发布:2025-02-05 10:03:56 浏览:281
行车记录仪存储卡多大合适 发布:2025-02-05 09:35:21 浏览:112
oppo手机锁屏密码忘了怎么办 发布:2025-02-05 09:33:50 浏览:124
phprsa算法 发布:2025-02-05 09:33:48 浏览:231