Android 启动Launcher
来源:互联网 发布:上海大学 刘铮 乐乎 编辑:程序博客网 时间:2024/06/13 23:44
转自:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-7414.html
一LauncherApplication->onCreate
1.//设置最小堆内存4M2.//建立应用图标缓存器
3.//建立LauncherModel
4.//注册Intent.ACTION_PACKAGE_ADDED,Intent.ACTION_PACKAGE_REMOVED,Intent.ACTION_PACKAGE_CHANGED事件监听器
LauncherModel作为广播接收器对上面3中事件进行监听
5.//添加对桌面favorites content provider 数据变化监听器
二Launcher->onCreate
1.获取LauncherApplication LauncherModel mIconCache等LauncherApplication初始化的对象
2.新建拖放控制器new DragController(this)
4.//获取桌面组件管理器,启动桌面组件host
5.//从array.hotseats中加载所有的hotseats(热键 如挂机按钮,google浏览器)
6.从launcher.preferences加载本地设置
7.//设置壁纸尺寸宽度=display.getWidth()* WALLPAPER_SCREENS_SPAN,高度=display.getHeight()
8.//加载布局文件
9.//初始化所有控件
10.//从Bundle savedInstanceState获取桌面持久化数据 设置mRestoring = true;
11.如果mRestoring == false,调用LauncherModel加载桌面项 mModel.startLoader(this, true,isLanguageChange);
a.LauncherModel.Loader.startLoader() 代码同步处理
b.新建LauncherModel.Loader.LoaderThread线程并启动线程(桌面项加载,详细见第三步)
12.注册Intent.ACTION_CLOSE_SYSTEM_DIALOGS广播监听
三 桌面项加载 LauncherModel.Loader.LoaderThread.run:新线程执行
1.等待主线程运行结束才开始加载
2.判断是否先加载桌面;loadWorkspaceFirst = cbk != null ? (!cbk.isAllAppsVisible()) : true;
3.loadWorkspaceFirst==true
a.loadAndBindWorkspace()
loadWorkspace():从数据库launcher.db中查询中所有桌面项构造对应类型的ItemInfo对象存入
mItems,mAppWidgets,mFolders列表.
bindWorkspace():
1.laucher.startBinding(),异步调用,在主线程中handle
//do no things
2.laucher.bindItems(),异步调用,在主线程中handle
1.根据ItemInfo对象创建桌面图标view对象
2.获取item.screen, item.cellX, item.cellY, spanX, spanY,
调用workspace.addInScreen添加到对应桌面的cell
1.重新设置桌面图标view 的layoutparam(类型为cellLayout.layoutparam)
2.根据item.screen获取桌面的celllayout对象,也就是workspace下5个用户桌面中的一个
3.调用celllayout.addview方法把桌面图标view对象添加为celllayout的child,也就是为用户桌面添加一个桌面图标
4.桌面图标view对象添加OnLongClickListener=laucher,由laucher负责监听桌面图标view的longclick事件
5.如果桌面图标是DropTarget对象,拖放控制器mDragController添加该view到拖放目的地列表
3.laucher.bindFolders(),异步调用,在主线程中handle
//launcher.mFolders.putAll(mFolders);
4.laucher.bindAppWidget(),异步调用,在主线程中handle
1.获取LauncherAppWidgetInfo的appWidgetId
2.获取AppWidgetProviderInfo appWidgetInfo mAppWidgetManager.getAppWidgetInfo(appWidgetId)
3.根据appWidgetInfo创建桌面组件的view AppWidgetHostView对象
4.调用workspace.addInScreen添加到对应桌面的cell
5.laucher.finishBindingItems(),异步调用,在主线程中handle
mWorkspaceLoading=false
b.loadAndBindAllApps();
如果没有加载apps或者改变了语言设置
loadAllAppsByBatch();
1.//设置package 查询条件Intent.ACTION_MAIN Intent.CATEGORY_LAUNCHER
2.//清空mAllAppsList mAllAppsList.clear();
3.//packageManager 查询所有应用pakages
4.分批次mAllAppsList.add 应用pakages
5.laucher.bindAllApplications()//异步调用
mAllAppsGrid.setApps(apps)
6.若分多个批次加载 laucher.bindAppsAdded()//异步调用
mAllAppsGrid.addApps(apps);
否则
onlyBindAllApps();
1.mAllAppsList.data.clone();
2.laucher.bindAllApplications()//异步调用
mAllAppsGrid.setApps(apps)
4.loadWorkspaceFirst==false
a.loadAndBindAllApps();
b.loadAndBindWorkspace();
- Android 启动Launcher
- Android启动Launcher过程
- 【Android】launcher启动参数
- android 启动launcher流程
- Android 获取Launcher 启动列表
- Android--launcher启动过程解析
- Android--launcher启动过程解析
- android launcher启动及开发
- Android Launcher 启动简述 <2>
- Android—launcher 启动流程
- Android笔记 - Android启动之Launcher启动
- android Launcher——启动过程详解
- android Launcher——启动过程详解
- android Launcher——启动过程详解
- android 启动时自动设置default Launcher
- android 启动时自动设置default Launcher
- android Launcher——启动过程详解
- Android开机自启动Launcher定制
- 性能测试出现FileNotFoundException: Too many open files的异常原因
- kubuntu root 登陆
- 【译】ExtJS 4.1会带来什么
- Makefile.am, Makefile.in, Makefile文件之间关系
- web 服务相关
- Android 启动Launcher
- 在VC中遍历查看进程并结束进程
- javascript定义对象的方式
- python2.43 到 python2.52
- asp.net碎笔
- 10款非常棒的开源论坛系统推荐
- 浏览器cookie机制
- jsp进行gzip压缩可行方法
- 在ssh、telnet断开之后继续执行程序