Android(安卓)Launcher3浅析(一)
16lz
2021-01-25
由于工作需要,也是因为想认真了解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);
//LauncherModel一个重要的类,负责消息处理机制,后面另起文章单独分析 // 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); }
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Android(安卓)中屏幕点击事件的实现
- android sdk 更新
- Android.mk加入aidl编译
- Android(安卓)OkHttp基本用法
- NSF方式挂载Android分区