相关类: ActvityThread.java
ApplicationThreadNative.java
AddManager.java
请参照Android ActivityThread(主线程或UI线程)简介http://blog.csdn.net/myarrow/article/details/14223493
查看分析。
主要是在ActvityThread.java -> systemMain()或者main(String[] args)->attach(boolean system) -> 这里进行AddManager的初始化,并传入Application 参数。-> 将所有的插件实现类加入进来。
->pms.getInstalledPackages(GET_META_DATA);(获取所以的已经安装packageInfo,再对这些进行筛选符号是插件类的应用。)如:
<application>
<meta-data
android:name="isFeatureAddon"
android:value="true" />
<meta-data
android:name="targetPackages"
android:value="com.android.launcher3" />
<meta-data
android:name="featureClassNames"
android:value="plugins.sprd.unreadinfo.UnreadInfoManagerAddon" />
</application>
这一定得在插件应用的AndroidManifest.xml中写清楚。
AddManager.java->在构造函数就和这个应用程序的Context保持一致。
AddManager.java->提供一个借口InitalCallback-》onCreate(Context context,Class clazz);->给实现插件类调用(plugIn目录)。
AddManager.java->getAddon(int featureId,Class defClazz)->给需要调用插件类的地方用(launcher,settings等模块,具体函数都可以不执行任何东西,默认执行的操作)。
说明: 1,featureId给出具体实现类的名称(字串ID)。如果没有赋值,就采用默认的defClazz类进行处理。
2,通过遍历所有的包(PackageInfo),来找到插件的具体实现类。
----------这样就可以一个应用关掉插件(只需要修改这个应用的Feature字串ID为空就可以。或者可以配置其它的名称来切换成不同的插件实现类。)
参考SPRD代码实现来电短信显示条数:
相关类:
SprdUnreadInfoManager.java------ 应用的实现插件类(默认操作等,什么也不做,主要是与AddManager.java挂钩后,然后调用具体的实现类。)
UnreadInfoManagerAdd.java------- 实际的插件实现类(具体操作全在这个类实现)
BubbleTextView.java--- Launcher的每一个应用显示类(applayFromShortcutInfo(),applyFromApplicationInfo()这两个函数里面调用插件类的具体实现。)
LauncherAppState.java------ Launcher应用传入一些重要参数给插件类(LauncherAppState(),onTerminate())
LauncherModel.java Launcher监听广播的实现类。Run()解析未读短信条数。
Launcher.java 处理读取短信条数权限有关,在OnResume()调用一次读取短信条数,并提供更新短信条数的函数给Launcher应用本身调用。
Workspace.java 提供更新短信条数的接口。
AllAppsContainerView.java 全部应用View的实现类。