Android系统的开机画面显示过程分析(12)
- public final class ActivityThread {
- ......
- private final class Idler implements MessageQueue.IdleHandler {
- public final boolean queueIdle() {
- ActivityClientRecord a = mNewActivities;
- if (a != null) {
- mNewActivities = null;
- IActivityManager am = ActivityManagerNative.getDefault();
- ActivityClientRecord prev;
- do {
- ......
- if (a.activity != null && !a.activity.mFinished) {
- try {
- am.activityIdle(a.token, a.createdConfig);
- a.createdConfig = null;
- } catch (RemoteException ex) {
- }
- }
- prev = a;
- a = a.nextIdle;
- prev.nextIdle = null;
- } while (a != null);
- }
- ensureJitEnabled();
- return false;
- }
- }
- ......
- }
- class ActivityManagerProxy implements IActivityManager
- {
- ......
- public void activityIdle(IBinder token, Configuration config) throws RemoteException
- {
- Parcel data = Parcel.obtain();
- Parcel reply = Parcel.obtain();
- data.writeInterfaceToken(IActivityManager.descriptor);
- data.writeStrongBinder(token);
- if (config != null) {
- data.writeInt(1);
- config.writeToParcel(data, 0);
- } else {
- data.writeInt(0);
- }
- mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
- reply.readException();
- data.recycle();
- reply.recycle();
- }
- ......
- }
- public final class ActivityManagerService extends ActivityManagerNative
- implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback {
- ......
- public final void activityIdle(IBinder token, Configuration config) {
- final long origId = Binder.clearCallingIdentity();
- mMainStack.activityIdleInternal(token, false, config);
- Binder.restoreCallingIdentity(origId);
- }
- ......
- }
- public class ActivityStack {
- ......
- final void activityIdleInternal(IBinder token, boolean fromTimeout,
- Configuration config) {
- ......
- boolean enableScreen = false;
- synchronized (mService) {
- ......
- // Get the activity record.
- int index = indexOfTokenLocked(token);
- if (index >= 0) {
- ActivityRecord r = (ActivityRecord)mHistory.get(index);
- ......
- if (mMainStack) {
- if (!mService.mBooted && !fromTimeout) {
- mService.mBooted = true;
- enableScreen = true;
- }
- }
- }
- ......
- }
- ......
- if (enableScreen) {
- mService.enableScreenAfterBoot();
- }
- }
- ......
- }
- public final class ActivityManagerService extends ActivityManagerNative
- implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback {
- ......
- void enableScreenAfterBoot() {
- EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_ENABLE_SCREEN,
- SystemClock.uptimeMillis());
- mWindowManager.enableScreenAfterBoot();
- }
- ......
- }
- public class WindowManagerService extends IWindowManager.Stub
- implements Watchdog.Monitor {
- ......
- public void enableScreenAfterBoot() {
- synchronized(mWindowMap) {
- if (mSystemBooted) {
- return;
- }
- mSystemBooted = true;
- }
- performEnableScreen();
- }
- ......
- }
Android系统的开机画面显示过程分析(12)相关推荐
- Android系统的开机画面显示过程分析(13)
WindowManagerService类的成员函数performEnableScreen的实现如下所示: public class WindowManagerService extend ...
- Android系统的开机画面显示过程分析
提到Android系统的UI,我们最先接触到的便是系统在启动过程中所出现的画面了.Android系统在启动的过程中,最多可以出现三个画面,每一个画面都用来描述一个不同的启动阶段.本文将详细分析这三个开 ...
- Android系统的开机画面显示过程分析(8)
3. 第三个开机画面的显示过程 第三个开机画面是由应用程序bootanimation来负责显示的.应用程序bootanimation在启动脚本init.rc中被配置成了一个服 ...
- 安卓linux开机画面,Android系统的开机画面显示过程分析(1)
好几个月都没有更新过博客了,从今天开始,老罗将尝试对Android系统的UI实现作一个系统的分析,也算是落实之前所作出的承诺.提到Android系统的UI,我们最先接触到的便是系统在启动过程中所出现的 ...
- Android系统的开机画面显示过程分析(5)
2. 第二个开机画面的显示过程 由于第二个开机画面是在init进程启动的过程中显示的,因此,我们就从init进程的入口函数main开始分析第二个开机画面的显示过程. init进 ...
- Android系统手机开机画面各个阶段代码执行流程分析(Part2)
3. 第三个开机画面的显示过程 第三个开机画面是由应用程序bootanimation来负责显示的.应用程序bootanimation在启动脚本init.rc中被配置成了一个服务,如下所示: servi ...
- Android系统定制开机logo和开机动画
定制开机logo和开机动画 开机logo 开机动画 bootanimation.zip 生成zip文件 添加新的开机动画 开机logo MTK ASOP中lk阶段的logo是开机后的第一个界面,也被称 ...
- Android系统手机开机画面各个阶段代码执行流程分析(Part1)
提到Android系统的UI,我们最先接触到的便是系统在启动过程中所出现的画面了.Android系统在启动的过程中,最多可以出现三个画面,每一个画面都用来描述一个不同的启动阶段.本文将详细分析这三个开 ...
- android系统修改开机动画
前提须知 开机动画是bootanimation.zip文件,包含part0和desc.txt两部分. part0文件夹:存放与屏幕分辨率相同的图片,图片命名数字递增. desc.txt文本:配置图片如 ...
- Android系统Surface机制的SurfaceFlinger服务的启动过程分析
在前面一篇文章中,我们简要介绍了Android系统Surface机制中的SurfaceFlinger服务.SurfaceFlinger服务是在System进程中启动的,并且负责统一管理设备的帧缓冲区. ...
最新文章
- boost::fusion::make_fused用法的测试程序
- JVM之垃圾收集器回收种类
- Binary String Minimizing CodeForces - 1256D(贪心)
- android暂停活动,如何将Android暂停活动带到前面
- DemocracyOS促进双方的公民参与
- 王思聪名下企业被拍卖1100万债权,此前还债20亿 网友:拍下等于“接盘侠”?...
- 产品管理系列(一)---优秀的产品经理所具有的素质 王泽宾
- dell笔记本重装win10系统超详细的教程(适用所有windows系统的一套流程)
- c语言中switch语句流程图_C语言程序设计程序流程结构
- 软件考试(一)计算机技术与软件专业技术资格(水平)考试(以下简称软件水平考试)含金量最高,与职称挂钩。
- Meta-learning algorithms for Few-Shot Computer Vision论文解读(三)
- 理]疏通中国历史脉络——“魏(三国)、晋(五胡十六国)、南北朝”篇
- ImageDraw类详解:几何图形的绘制与文字的绘制
- setenv setfenv
- Android Manifest 权限描述大全
- 【MySQL】压缩包方式 - Windows下载安装及简单配置
- Unity UI跟随鼠标移动
- [SWPUCTF 2021 新生赛]easyrce
- 超简单的C++去重、排序
- Android应用程序资源的编译和打包过程分析
热门文章
- AutoResetEvent类的使用
- String.format中大括号的加入方法
- 暂且解决INSTALL_FAILED_SHARED_USER_INCOMPATIBLE错误
- vs2008的预编译命令
- FabFilter Total Bundle 2021 for Mac - 经典效果器合集(2022版)
- 解决关于升级macOS12后Alfred for mac无法运行PHP插件的问题
- 无法卸载 Mac 上的磁盘时该怎么办?
- BricsCAD 21 for Mac(CAD建模软件)多语言版
- 基于SpringMVC国际化资源配置方式Demo
- electron 爬坑记