Android Launcher3浅析(一)
来源:互联网 发布:linux下oracle安装教程 编辑:程序博客网 时间:2024/06/05 22:50
由于工作需要,也是因为想认真了解Launcher3的运行原理,所有潜下心来研究一下。
首先当然是按部就班。AndroidManifest.xml-->LauncherApplication.java-->LauncherAppState.java
LauncherApplication.java没有什么好分析的,这篇文章就主要分析一下LauncherAppState.java ,当然从构造函数开始来分析,源码如下。
private LauncherAppState() { if (sContext == null) { throw new IllegalStateException("LauncherAppState inited before app context set"); } Log.v(Launcher.TAG, "LauncherAppState inited"); if (sContext.getResources().getBoolean(R.bool.debug_memory_enabled)) { MemoryTracker.startTrackingMe(sContext, "L"); } /*上面没有什么好分析的,主要是方便调试用的*/
// set sIsScreenXLarge and mScreenDensity *before* creating icon cache mIsScreenLarge = isScreenLarge(sContext.getResources()); mScreenDensity = sContext.getResources().getDisplayMetrics().density; //判断是否为大屏平板和获取屏幕的密度,获取大屏在本文件有介绍,这里指的注意的是launcher3有一个config.xml的文件,这点做得很好,直接在里面修改bool值就可以
//屏幕密度在framework处理
mWidgetPreviewCacheDb = new WidgetPreviewLoader.CacheDb(sContext); mIconCache = new IconCache(sContext);
//CacheDb和存储有关,是从SQLiteOpenHelper继承来的;
//IconCache是icon图标的处理方式,了解一下就可以,没有必要太多的介绍 mAppFilter = AppFilter.loadByName(sContext.getString(R.string.app_filter_class)); mModel = new LauncherModel(this, mIconCache, mAppFilter);
//<span style="font-family: Arial, Helvetica, sans-serif;">LauncherModel一个重要的类,负责消息处理机制,后面另起文章单独分析</span> // Register intent receivers IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); filter.addAction(Intent.ACTION_PACKAGE_REMOVED); filter.addAction(Intent.ACTION_PACKAGE_CHANGED); filter.addDataScheme("package"); sContext.registerReceiver(mModel, filter); filter = new IntentFilter(); filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE); filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE); filter.addAction(Intent.ACTION_LOCALE_CHANGED); filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); sContext.registerReceiver(mModel, filter); filter = new IntentFilter(); filter.addAction(SearchManager.INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED); sContext.registerReceiver(mModel, filter); filter = new IntentFilter(); filter.addAction(SearchManager.INTENT_ACTION_SEARCHABLES_CHANGED); sContext.registerReceiver(mModel, filter); if (LauncherLog.DEBUG) { LauncherLog.d(TAG, "LauncherAppState: mIconCache = " + mIconCache + ", mModel = " + mModel + ", this = " + this); } // Register for changes to the favorites ContentResolver resolver = sContext.getContentResolver(); resolver.registerContentObserver(LauncherSettings.Favorites.CONTENT_URI, true, mFavoritesObserver); }
0 0
- Android Launcher3浅析(一)
- Android M Launcher3主流程源码浅析
- Android M Launcher3主流程源码浅析
- Android M Launcher3主流程源码浅析
- Android M Launcher3主流程源码浅析
- Android Launcher3(一) -- 启动过程
- Launcher3源码浅析(5.1)--Launcher.java
- Launcher3源码浅析(5.1)--Workspace
- Launcher3源码浅析(5.1)--LauncherModel
- Launcher3源码浅析(5.1)--Hotseat
- Launcher3源码浅析(5.1)--OverviewMode
- Android 6.0的Launcher3的关于Hotseat的浅析
- Android M Launcher3启动与工作流程源码浅析
- Launcher3源码浅析
- Launcher3的启动流程(一)
- Launcher3的启动流程(一)
- Android launcher3 -- launcher3源码1
- Android launcher3 -- launcher3源码2
- IOS中 ScrollView.contentOffset
- 【P1777】引水入城 NOIP2010
- Andriod 通讯录
- __must_check含义及出处
- google In-app Billing FAQ
- Android Launcher3浅析(一)
- POJ 1837Balance
- 对CONTAINING_RECORD的理解
- 用 Hadoop 进行分布式并行编程(三)部署到分布式环境
- linux下用命令查找dos格式的文件
- 化整为零 盛大在换轨
- js 日期函数扩展
- final finally finalize的区别
- iOS中汉字转拼音