本文主要是对自己分析MTK 6.0 Launcher3源码的笔记,如有发现不对,请及时指正
启动流程
app启动都是由application开始启动的。
LauncherApplication.java
public void onCreate() {
super.onCreate();
...
LauncherAppState.setApplicationContext(this);
LauncherAppState.getInstance().setLauncehrApplication(this);
..
}
上面最主要的就是获取了 LauncherAppState 这个实例,然后将自己传到LauncherAppState的LauncherApplication对象 让
LauncherAppState是用于存储全局变量,比如缓存(各种cache),维护内存数据的类(LauncherModel),下面是LauncherAppState的类结构:
private final AppFilter mAppFilter;
private final LauncherModel mModel;
private final IconCache mIconCache;
private WidgetPreviewLoader.CacheDb mWidgetPreviewCacheDb;
private static WeakReference sLauncherProvider;
mAppFilter:用于存储app文件夹的一些信息
mModel:用于维护Launcher在内存中的数据,比如app信息列表和widget信息列表,同时提供了更新数据库的操作
mIconCache:应用程序icon和title的缓存
mWidgetPreviewCacheDb:存储widget预览信息的数据库
sLauncherProvide:r app和widget的ContentProvider,用数据库存储信息
private LauncherAppState() {
...
mIsScreenLarge = isScreenLarge(sContext.getResources());
mScreenDensity = sContext.getResources().getDisplayMetrics().density;
recreateWidgetPreviewDb();
mIconCache = new IconCache(sContext);
mAppFilter = AppFilter.loadByName(sContext.getString(R.string.app_filter_class));
mBuildInfo = BuildInfo.loadByName(sContext.getString(R.string.build_info_class));
mModel = new LauncherModel(this, mIconCache, mAppFilter);
final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(sContext);
l