SystemUI初始化加载流程
来源:互联网 发布:p2p网络推广方案ppt 编辑:程序博客网 时间:2024/06/08 03:38
1.1System启动,ActivityManagerService在systemReady时启动SystemUIService:
frameworks\base\services\java\com\android\server\SystemServer.java
public static void main(String[] args) {
new SystemServer().run();
}
àstartOtherServices();
àmActivityManagerService.systemReady(new Runnable()
à static final void startSystemUi(Context context) {
Intent intent = new Intent();
intent.setComponent(newComponentName("com.android.systemui",
"com.android.systemui.SystemUIService"));
//Slog.d(TAG, "Starting service: " + intent);
context.startServiceAsUser(intent, UserHandle.OWNER);
}
1.2SystemUIService启动后会启动SystemUI的各个子模块并进行初始化:
frameworks\base\packages\SystemUI\src\com\android\systemui\SystemUIService.java
àonCreate()
à((SystemUIApplication) getApplication()).startServicesIfNeeded();
跟普通应用一样SystemUIService被启动时会创建SystemUIService所属的Application,在这里就是SystemUIApplication。
à startServicesIfNeeded()会启动SERVICES数组里的的服务:
private final Class<?>[] SERVICES = new Class[] {
com.android.systemui.tuner.TunerService.class,
com.android.systemui.keyguard.KeyguardViewMediator.class,
com.android.systemui.recents.Recents.class,
com.android.systemui.volume.VolumeUI.class,
com.android.systemui.statusbar.SystemBars.class,
com.android.systemui.usb.StorageNotification.class,
com.android.systemui.power.PowerUI.class,
com.android.systemui.media.RingtonePlayer.class,
};
这些服务并不是真正的Services,只是每一个都管理着SystemUI的一部分,他们继承自com/android/systemui/SystemUI.java
à调用各个SystemUI的start()
1.3状态栏的启动流程
à com.android.systemui.statusbar.SystemBars.class:start()
SystemBars:start()会new一个ServiceMonitor并去真正启动一个的状态栏管理服务。
à com.android.systemui.statusbar.SystemBars.class: onNoService ()
第一次服务还没启动时,会回调回来到onNoService (),然后开始创建一个新的状态栏。
à com.android.systemui.statusbar.SystemBars.class:createStatusBarFromConfig ()
读取一个写在Resource的String配置,用ClassLoader创建一个新的状态栏实例。
final String clsName =mContext.getString(R.string.config_statusBarComponent);
其中config_statusBarComponent为:
<string name="config_statusBarComponent"translatable="false">com.android.systemui.statusbar.phone.PhoneStatusBar</string>
à com.android.systemui.statusbar.phone.PhoneStatusBar:strart()
PhoneStatusBar就是真正管理着SystemUI中状态栏部分的类,职能类似于Activity,管理着UI和业务。
在PhoneStatusBar:strart()中会进行很多东西的初始化,其中最重要的是:
à com/android/systemui/statusbar/BaseStatusBar.java:start()
调用父类BaseStatusBar的start(),里面也是各种初始化,最主要的就是调用了createAndAddWindows()
*** 远程服务通信 mBarService =IStatusBarService.Stub.asInterface(
ServiceManager.getService(Context.STATUS_BAR_SERVICE));
com.android.server.statusbar.StatusBarManagerServiceextendsIStatusBarService.Stub
mBarService.registerStatusBar(mCommandQueue,iconList, switches, binders);
com.android.systemui.statusbar.CommandQueueextends IStatusBar.Stub
CommandQueue&Callbacks为BaseStatusBar实现的重要接口,包括setSystemUiVisibility等重要方法 ***
à PhoneStatusBar: createAndAddWindows()
createAndAddWindows()是个抽象方法,PhoneStatusBar实现了它。
à PhoneStatusBar: addStatusBarWindow ()
这个方法就是向窗口服务申请一个类型为TYPE_STATUS_BAR的Window并插入到窗口栈中。
à PhoneStatusBar: makeStatusBarView ()
首先先初始化View,加载布局R.layout.super_status_bar,View的根为一个StatusBarWindowView类型的自定义View。生成StatusBarWindowView后还会去获取各个子View的引用,对子View进行初始化,对子View设置监听等。
1. 取消从应用进入动画
Recents. startRecentsActivity()
if(useThumbnailTransition) {
// Try starting with a thumbnailtransition
// ActivityOptions opts =getThumbnailTransitionActivityOptions(topTask, stack,
// mDummyStackView);//取消fromthumbnail 动画
ActivityOptions opts =getHomeTransitionActivityOptions(false);
2. 取消进入时顶部底部黑色Scrm黑影动画recents\RecentsActivity.java
// mScrimViews.prepareEnterRecentsAnimation();
// mScrimViews.startEnterRecentsAnimation();
// mScrimViews.startExitRecentsAnimation();
3. 裁剪任务列表
recents\views\TaskStackView.java
computeScroll(){ // clipTaskViews();}
4. 任务列表退出动画
recents\views\TaskStackView.java
// tv.startExitToHomeAnimation(ctx);
5. 显示最近列表右上角删除x 图标
recents\views\TaskStackView.java
// mUIDozeTrigger.startDozing();
6. 取消桌面进入动画
recents\views\TaskStackView.java
onFirstLayout() /* …… */
startExitToHomeAnimation() 退出到桌面动画
startDismissAllAnimation()清理按钮清理动画
7. 取消最近任务列表点击外部退出
recents\views\TaskStackViewTouchHandler.java
// maybeHideRecentsFromBackgroundTap((int)ev.getX(), (int) ev.getY());
- SystemUI初始化加载流程
- SystemUI 下拉通知栏快捷键加载流程
- Android 5.1 SystemUI 之 Status Bar 加载流程
- Android之SystemUI加载流程和NavigationBar的分析
- SystemUI源码分析三(StatusBar的加载流程)
- Android 5.0 状态栏(SystemUI)系统图标加载流程简单分析
- android SystemUI 流程分析
- android systemui流程
- android4 SystemUI 流程分析
- android SystemUI 流程分析
- android SystemUI 流程分析
- 5.0systemUI启动流程
- SystemUI之呈现流程
- SystemUI启动流程
- SystemUI启动流程
- android SystemUI浅析之SystemUI启动流程
- Android 4.0 ICS SystemUI浅析——StatusBar加载流程分析
- Android 4.0 ICS SystemUI浅析——StatusBar加载流程之Notification
- poj1000
- Android 如何实现一个平滑过渡的ViewPager广告条
- 射手Android ViewPager打造3D画廊
- 微信开发之——报警排查
- Linux 查看进程和删除进程
- SystemUI初始化加载流程
- c++ vector,iterator,map的使用代码示例
- 移动端输入框被手机键盘挡住
- 入门框架前总结
- C++ 中const的使用总结
- Android 蓝牙技术 带你实现终端间数据传输
- 如何查看已安装的CentOS版本信息
- 关于stm32f0xx中断模式串口只能发不能收的问题,入行必过的第一个坑
- Android手机软键盘遮盖输入框之重新布局详解