Android-Launcher-LauncherApplication解析
因为这个app是Launcher,所以这个类是Android系统中的第一个Application的启动,主要做了这些事情
- 各各私有变量的初始化工作
- 为LauncherModel注册广播接收者
- 初始化LauncherProvider
public class LauncherApplication extends Application {static final String TAG = "LauncherApplication";/*这个是为整个Launcerapp 提供数据的,相当于mvp 中的m作用,很重要的类LauncherModel 本身是个广播接收者,是继承BroadcastReceiver提供数据支持,数据保存状态,刷新屏幕app的状态的作用*/private LauncherModel mModel;//对launcer中的图片提供缓存作用的private IconCache mIconCache;//存储着串口widget 小部件信息的数据库private WidgetPreviewLoader.CacheDb mWidgetPreviewCacheDb;//标记当前的设备是否是大屏设备,比如平板就是大屏的,这个laucnher是可以适配平板的private static boolean sIsScreenLarge;private static float sScreenDensity;//长按事件private static int sLongPressTimeout = 300;//launcher 这个app下关于SharedPreference的key 统一的private static final String sSharedPreferencesKey = "com.android.launcher2.prefs";//这个是关于launcher中的app的数据信息的数据提供者,供LauncherModel 查询 还有插入WeakReference<LauncherProvider> mLauncherProvider;@Overridepublic void onCreate() {super.onCreate();// set sIsScreenXLarge and sScreenDensity *before* creating icon cachesIsScreenLarge = getResources().getBoolean(R.bool.is_large_screen);sScreenDensity = getResources().getDisplayMetrics().density;recreateWidgetPreviewDb();mIconCache = new IconCache(this);mModel = new LauncherModel(this, mIconCache);//LauncherApps 是通过系统服务LauncherAppsService查询 系统中app的数据集合的作用//LauncherAppsService最终是通过像PackageManager向PackageManagerService查询LauncherApps launcherApps = (LauncherApps)getSystemService(Context.LAUNCHER_APPS_SERVICE);//注册查询的结果回调launcherApps.registerCallback(mModel.getLauncherAppsCallback());// Register intent receivers//为LauncherModel 注册广播IntentFilter filter = new IntentFilter();filter.addAction(Intent.ACTION_LOCALE_CHANGED);filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);registerReceiver(mModel, filter);filter = new IntentFilter();filter.addAction(SearchManager.INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED);registerReceiver(mModel, filter);filter = new IntentFilter();filter.addAction(SearchManager.INTENT_ACTION_SEARCHABLES_CHANGED);registerReceiver(mModel, filter);// Register for changes to the favoritesLanContentResolver resolver = getContentResolver();//注册LauncherProvider更新的观察者,然后通知LaucherModel 做刷新resolver.registerContentObserver(LauncherSettings.Favorites.CONTENT_URI, true,mFavoritesObserver);}public void recreateWidgetPreviewDb() {mWidgetPreviewCacheDb = new WidgetPreviewLoader.CacheDb(this);}/*** There's no guarantee that this function is ever called.*/@Overridepublic void onTerminate() {super.onTerminate();unregisterReceiver(mModel);ContentResolver resolver = getContentResolver();resolver.unregisterContentObserver(mFavoritesObserver);}/*** Receives notifications whenever the user favorites have changed.*/private final ContentObserver mFavoritesObserver = new ContentObserver(new Handler()) {@Overridepublic void onChange(boolean selfChange) {// If the database has ever changed, then we really need to force a reload of the// workspace on the next loadmModel.resetLoadedState(false, true);mModel.startLoaderFromBackground();}};LauncherModel setLauncher(Launcher launcher) {mModel.initialize(launcher);return mModel;}IconCache getIconCache() {return mIconCache;}LauncherModel getModel() {return mModel;}WidgetPreviewLoader.CacheDb getWidgetPreviewCacheDb() {return mWidgetPreviewCacheDb;}void setLauncherProvider(LauncherProvider provider) {mLauncherProvider = new WeakReference<LauncherProvider>(provider);}LauncherProvider getLauncherProvider() {return mLauncherProvider.get();}public static String getSharedPreferencesKey() {return sSharedPreferencesKey;}public static boolean isScreenLarge() {return sIsScreenLarge;}public static boolean isScreenLandscape(Context context) {return context.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_LANDSCAPE;}public static float getScreenDensity() {return sScreenDensity;}public static int getLongPressTimeout() {return sLongPressTimeout;}
}
Android-Launcher-LauncherApplication解析相关推荐
- Android Launcher桌面图标显示数字
之前一直以为是应用本身在对图标进行修改,看了源码之后发现其实主要的工作并不是应用自己完成的,主要的工作在是launcher里面完成的. 关于系统里面类似未读短信的具体处理流程如下: 原理 一个应用要实 ...
- android launcher
引用:http://blog.csdn.net/fzh0803/article/details/6279995 去年做了launcher相关的工作,看了很长时间.很多人都在修改launcher,但还没 ...
- android关于pull解析的问题-1
android关于pull解析步骤如下: 一.介绍: 此文主要是介绍利用pull解析器读取手机上的xml文件和把对象保存到xml文件中 二.新建一个android工程--PullXml 工程目录: 三 ...
- android 壁纸改变回调,Android Launcher分析和修改13——实现Launcher编辑模式(1) 壁纸更换...
已经好久没更新Launcher系列文章,今天不解析源码,讲讲如安在Launcher里面添加桌面设置的功能.今朝很多第三方Launcher或者定制Rom都有简单易用的桌面设置功能.例如小米MIUI的La ...
- Android源码解析
一.Android系统启动过程 启动电源以及系统启动:当电源按下时引导芯片代码从预定义的地方(固化在ROM)开始执行.加载引导程序BootLoader到RAM中并执行 引导程序BootLoader:它 ...
- android使用sax解析xml
随着技术的发展,现在的web已经和以前不同了.web已经逐渐像移动的方向倾斜,作为程序员的确应该拓展一下自己的知识层面.学习各方面的知识,今天就接着前几天的弄一下android的xml解析,这次就使用 ...
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(下) .
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/25466665 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工 ...
- Android源码解析(一)动画篇-- Animator属性动画系统
Android源码解析-动画篇 Android源码解析(一)动画篇-- Animator属性动画系统 Android源码解析(二)动画篇-- ObjectAnimator Android在3.0版本中 ...
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(下)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/25466665 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工 ...
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)
本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工,英文好的朋友也可以直接去读原文. http://developer.android.com/guide/topics/ui/act ...
最新文章
- django model filter_Django框架使用流程(四)
- jstl标签: c:Foreach详解
- mysql源码如何解析where字句_MySQL解析器源码分析--对select语句中子查询处理逻辑的分析(一)...
- SqlServer索引的原理与应用
- HDU 4288 Coder [线段树]
- php接口调用实例源代码,小蚂蚁学习APP接口开发(7)—— APP接口实例——读取缓存方式开发APP接口的代码案例...
- lisp读写cass属性_130507Auto Lisp在CASS图形要素规范化中的应用
- MongoDB 一个基于分布式文件存储的数据库
- 创建简单的Flex组件
- jquery中阻止事件冒泡的方法
- 玩具谜题(洛谷-P1563)
- linux pandas教程_这7种Python的全新玩法,你们一定不知道!(附赠Python教程)
- DDD(Domain-Driven Design)领域驱动设计-(三)命令风暴寻找聚合
- IDEA中添加Tomcat配置,Run/Debug Configurations中没有Tomcat选项
- Mybatis学习(5)高级映射
- mysql ulimit_Ubuntu 16.04 装机后如何永久更改ulimit和修改MySQL的存储路径datadir
- 轻松停车入位 淑女节女司机5大用车指南
- RAID5换硬盘重建记录
- 口令订单红包V1.1.3公众号源码,增加关注多久后才能使用口令与领取红包功能
- 荧光定量PCR:基因相对表达量计算方法