因为这个app是Launcher,所以这个类是Android系统中的第一个Application的启动,主要做了这些事情

  1. 各各私有变量的初始化工作
  2. 为LauncherModel注册广播接收者
  3. 初始化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解析相关推荐

  1. Android Launcher桌面图标显示数字

    之前一直以为是应用本身在对图标进行修改,看了源码之后发现其实主要的工作并不是应用自己完成的,主要的工作在是launcher里面完成的. 关于系统里面类似未读短信的具体处理流程如下: 原理 一个应用要实 ...

  2. android launcher

    引用:http://blog.csdn.net/fzh0803/article/details/6279995 去年做了launcher相关的工作,看了很长时间.很多人都在修改launcher,但还没 ...

  3. android关于pull解析的问题-1

    android关于pull解析步骤如下: 一.介绍: 此文主要是介绍利用pull解析器读取手机上的xml文件和把对象保存到xml文件中 二.新建一个android工程--PullXml 工程目录: 三 ...

  4. android 壁纸改变回调,Android Launcher分析和修改13——实现Launcher编辑模式(1) 壁纸更换...

    已经好久没更新Launcher系列文章,今天不解析源码,讲讲如安在Launcher里面添加桌面设置的功能.今朝很多第三方Launcher或者定制Rom都有简单易用的桌面设置功能.例如小米MIUI的La ...

  5. Android源码解析

    一.Android系统启动过程 启动电源以及系统启动:当电源按下时引导芯片代码从预定义的地方(固化在ROM)开始执行.加载引导程序BootLoader到RAM中并执行 引导程序BootLoader:它 ...

  6. android使用sax解析xml

    随着技术的发展,现在的web已经和以前不同了.web已经逐渐像移动的方向倾斜,作为程序员的确应该拓展一下自己的知识层面.学习各方面的知识,今天就接着前几天的弄一下android的xml解析,这次就使用 ...

  7. Android ActionBar完全解析,使用官方推荐的最佳导航栏(下) .

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/25466665 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工 ...

  8. Android源码解析(一)动画篇-- Animator属性动画系统

    Android源码解析-动画篇 Android源码解析(一)动画篇-- Animator属性动画系统 Android源码解析(二)动画篇-- ObjectAnimator Android在3.0版本中 ...

  9. Android ActionBar完全解析,使用官方推荐的最佳导航栏(下)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/25466665 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工 ...

  10. Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)

    本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工,英文好的朋友也可以直接去读原文. http://developer.android.com/guide/topics/ui/act ...

最新文章

  1. django model filter_Django框架使用流程(四)
  2. jstl标签: c:Foreach详解
  3. mysql源码如何解析where字句_MySQL解析器源码分析--对select语句中子查询处理逻辑的分析(一)...
  4. SqlServer索引的原理与应用
  5. HDU 4288 Coder [线段树]
  6. php接口调用实例源代码,小蚂蚁学习APP接口开发(7)—— APP接口实例——读取缓存方式开发APP接口的代码案例...
  7. lisp读写cass属性_130507Auto Lisp在CASS图形要素规范化中的应用
  8. MongoDB 一个基于分布式文件存储的数据库
  9. 创建简单的Flex组件
  10. jquery中阻止事件冒泡的方法
  11. 玩具谜题(洛谷-P1563)
  12. linux pandas教程_这7种Python的全新玩法,你们一定不知道!(附赠Python教程)
  13. DDD(Domain-Driven Design)领域驱动设计-(三)命令风暴寻找聚合
  14. IDEA中添加Tomcat配置,Run/Debug Configurations中没有Tomcat选项
  15. Mybatis学习(5)高级映射
  16. mysql ulimit_Ubuntu 16.04 装机后如何永久更改ulimit和修改MySQL的存储路径datadir
  17. 轻松停车入位 淑女节女司机5大用车指南
  18. RAID5换硬盘重建记录
  19. 口令订单红包V1.1.3公众号源码,增加关注多久后才能使用口令与领取红包功能
  20. 荧光定量PCR:基因相对表达量计算方法

热门文章

  1. 【JAVA】桌宠开发发现的有趣内容(1) java 图片镜像 反转的方法。
  2. 「Python数据分析系列」11.机器学习
  3. 简单分享酒店房间预订小程序制作步骤
  4. 用手机怎么把图片转换成PDF
  5. [读史思考] 田单火牛阵是真实的吗?
  6. vue封装带天数的倒计时
  7. TopView(赢富)数据图片怎么看
  8. C++ 流(stream)总结
  9. 【深度学习】知乎高赞:深度学习如何调参?
  10. javaSwing 国际象棋游戏