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
原创粉丝点击