流程
开始 --》 初始化Launcher上下文以及Launcher自身的环境设置 --》建立与LauncherMadel之间的联系以及图片缓存处理 --》 创建拖拽控制器以及AppWidget服务初始化 --》检查本地配置是否发生改变 --》 Launcher界面初始化(填充布局、设置控件属性以及实时布局) --》 观察Widget数据库配置变化 --》 历史状态恢复restoreState(mSavedState) --》 非状态恢复?mRestoring为ture?为true加载页面数据 然后注册ACTION_CLOASE_SYSTEM_DIALOGS广播 为false直接进行注册上面的广播 --》 更新搜索以及市场图标updateGlobalIcons() --》解锁方向设置unlockScreenOrientation(true) --》 显示帮助或者介绍信息 --》结束
初始化Launcher运行环境 (每个小结开 头的类名是完成后面功能所要使用到的类,写在前面是为了好记录这些东西,方便我自己后期忘记类后查找。)
-
LauncherAppState Launcher在创建的时候需要对运行环境进行初始化,这些信息将保存在LauncherAppState实例中,并且通过LauncherAppState建立与桌面数据库的联系,已经能及时享影数据库的变化。Launcher实际继承了LauncherProviderChangeListener接口的类,通过LauncherProvider的setLauncherProviderChangeListener方法将接口部分设置到LauncherProvider中,以实现Launcher与数据库的联通。目前我的水平是不是可以理解成,其实这个LauncherAppState就是一个中间类,为了在数据库发生改变的时候通过桌面更改页面的作用呢?而更改数据库等可能是别的地方更改的。
-
Dispaly 为生成的Launcher的动态网格进行必要的准备
Display display = getWindowManager().getDefaultDisplay();
display.getCurrentSizeRange(smallestPoint, largestPoint);
display.getRealSize(realPoint);
DisplayMetrics dm = new DisplayMetrics();
display.getMetrics(dm);
-
DeviceProfile 通过使用它DeviceProfile grid = app.initDynamicGrid(......)生成动态网格。
-
LauncherModel 获取共享数据对象以及建立Launcher与LauncherModel的联系
这里需要记住一下SharedPreferences中的三个字段。
launcher.first_load_complete 布尔型 Launcher第一次加载完成
launcher.first_run_activity_displayed 布尔型 含义Launcher第一次使用
launcher.intro_screen_dissmissed 布尔型 界面曾经被显示
Launcher 继承了LauncherModel.Callbacks
LauncherModel 可以看成是一个数据生成器,他所生成的数据需要通过LauncherModel.Callbacks接口传递给Launcher来处理, 通过LauncherAppState的set
Launcher方法完成 -
IconCache 根据动态网格刷新图标缓冲区
通过使用IconCache的flushInvalidIcons方法实现这个功能 -
DragController 初始化拖拽控制器 通过new传入launcher进行初始化
主要记住:
mScallZone:屏幕边缘的区域可以使你在拖拽时左右移动工作空间
mVelocityTracker:是一个追踪器,用于跟踪屏幕滑动的速度。 -
States 获取应用程序的运行状态
-
创建并启动WidgetHost 桌面小部件 是桌面的重要组件之一
-
检查配置是否有更新
当一些本地配置(如以动国家码MCC、移动网络码MNC、所在地区等)发生变化的时候需要更新桌面元素(比如图标等)因此在创建的时候,首先就要对这些配置进行检查,checkForLocaleChange方法将完成这个工作。 -
装载Launcher布局以及实例化相关控件
开始 -》Luancher视图的基础设置-》设置HotSeat-》设置预览模式UI以及相关菜单按钮事件 -》 设置workspace -》设置搜索条应用程序菜单 -》 这是拖拽控制器 -》结束
Launcher试图的基础设置
//设置Launcher为全屏
mLauncherView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
// Setup the drag layer 设置拖拽层
mDragLayer.setup(mDragController, mWorkspace);
对Launcher预览模式下的控件以及预览模式面板进行必要的设置。
首先预览模式的View是overview_panel
-
DeviceProfile 根据动态网格的属性部署桌面
-
Launcher的状态恢复 在书本50页
-
监听Widget配置变化 registerContentObservers
-
LauncherModel 加载桌面数据 LauncherModel.startLoader
网友评论