Android系统启动篇
4,《Android SystemServer进程启动流程》
Android系统开发准备篇
3,《Android Framework代码IDE加载和调试》
Android系统开发实践篇
4,《android单独编译framework模块并push》
Android系统开发核心知识储备篇
1,《Android编译系统-envsetup和lunch代码篇》
6,《Android中Activity、View和Window关系详解》
11,《android中AMS进程通知Zygote进程fork新进程的通信方式》
Android核心功能详解篇
2,《Android 手势导航(从下往上滑动进入多任务页面)》
3,《android手势分析(应用界面左往右边滑动退出应用)》
———————————————————————————————————————————
一,背景介绍
PIXEL手机上的底部导航栏,如下图:
底部导航栏的加载流程,是接下来分析的重点。
二,加载流程
创建导航栏视图,并添加到窗口上:
1、系统导航栏的创建是在StatusBar的makeStatusBarView方法中。
protected void createNavigationBar(@Nullable RegisterStatusBarResult result) {
mNavigationBarController.createNavigationBars(true /* includeDefaultDisplay */, result);
}
NavigationBarController.java,在创建完StatusBar所对应的视图之后,会调用IWindowManager的hasNavigationBar方法来判断系统是否存在导航栏,如果存在则会调用createNavigationBar方法,该方法会进一步调用NavigationBarFragment的静态方法create来创建导航栏视图。
2、NavigationBarFragment的create方法如下所示,加载布局
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.navigation_bar, container, false);
}
3、KeyButtonView.java点击事件相应,onTouchEvent接口监听触摸事件,sendEvent发送对应按键值mCode。
public static final int KEYCODE_HOME = 3;
/** Key code constant: Back key. */
public static final int KEYCODE_BACK = 4;
/** Key code constant: App switch key.
* Should bring up the application switcher dialog. */
public static final int KEYCODE_APP_SWITCH = 187;
对应上面三个按键