Android AddManager浅析

来源:互联网 发布:linux服务器开发实例 编辑:程序博客网 时间:2024/06/16 07:20

相关类: 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的实现类。




1 0
原创粉丝点击