Launcher源码浅析-----涉及Workspace界面资源加载重要类和资源文件简介

来源:互联网 发布:屏幕亮点修复软件 编辑:程序博客网 时间:2024/05/01 12:07

  前言:Workspace界面加载属于Launcher资源加载的一部分,总体来说,Workspace上的加载主要还是解析default_workspace.xml文件中定义的资源。Launcher启动后在Workspace界面和Hotseat上看到的默认显示的应用图标、小部件等都是在default_workspace.xml文件中定义的。本博文主要简单介绍涉及Workspace界面资源加载重要类和default_workspace.xml定义的资源。

   一. Launcher加载工作中的重要类和接口实现

    在分析Workspace界面加载资源前,我们先来看看涉及到Launcher资源加载流程的重要类之间的关系图,以及相关接口的功能实现说明。

   

     纵观上面的类图,逐步分析每个类和接口扮演的角色:        

       Callbacks在LauncherModel中定义的一个内部接口,该接口中声明了一些进行Launcher加载的函数。

       LauncherModel:该类主要用于加载桌面图标、小部件、文件夹。同时LaucherModel是一个广播接收器,在程序包发生改变、区域、或者配置文件发生改变时,都会发送广播给LaucherModel,LaucherModel会根据不同的广播来做相应加载操作。

      LauncherLauncher模块的主Activity,实现Callbacks接口,Callbacks中的函数都在Launcher中实现,供LauncherModel中进行加载工作时进行回调。

         接下来解析分析Callbacks接口中声明的函数在Launcher中的实现功能

            setLoadOnResume()由于Launcher继承自Activity,因此Launcher可能会处于paused状态(onPause()被调用),则有可能在这段时间内资源可能

发生了改变,如应用被删除或新应用安装,因此需要在onResume()中调用此方法进行重新加载。

            getCurrentWorkspaceScreen()获取桌面(Workspace)当前屏幕页数。

            startBinding()通知Launcher加载开始,并更新Workspace上的shortcuts。

            bindItems(ArrayList<ItemInfo>shortcuts, int start, int end)以6个item为单位,批量处理item在workspace中的绑定(end-start = 6),如需要绑定在workspace中的item个数为15,则先处理6-0,,12-6个,再处理15-12个。绑定在workspace中的item的个数由default_workspace.xml文件中定义的item个数决定。

            bindFolders(HashMap<Long,FolderInfo>folders)启动Launcher时,若桌面上一开始就有文件夹,则调用该方法绑定相关的数据。

            finishBindingItems()完成相关资源的加载。

            bindAppWidget(LauncherAppWidgetInfoinfo)将widget添加到workspace。

            bindAllApplications(ArrayList<ApplicationInfo>apps):给菜单界面添加应用(系统所加载的每个应用都对应一个图标)

            bindAppsAdded(ArrayList<ApplicationInfo>apps)单独安装一个第三方应用时执行该方法添加应用信息

            bindAppsUpdated(ArrayList<ApplicationInfo>apps)应用本身升级安装替换时执行该方法。

            bindAppsRemoved(ArrayList<ApplicationInfo>apps, boolean permanent)卸载应用时执行该方法

            bindPackagesUpdated()多个应用程序包更新时执行该方法

            isAllAppsVisible()判断当前是否为菜单界面,返回true,说明进入菜单界面。

            bindSearchablesChanged()桌面搜索框更新时执行该方法

   . default_workspace.xml文件介绍

   Launcher中的default_workspace.xml文件在Launcher启动时,Workspace和Hotseat部分加载和显示资源时必须去解析的文件。下面我们来看看该文件的代码片段,如下:

<?xml version="1.0" encoding="utf-8"?><favorites xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher">......  <favorite        launcher:packageName="com.android.camera"        launcher:className="com.android.camera.Camera"        launcher:screen="2"        launcher:x="0"        launcher:y="3" />  ......  <appwidget        launcher:packageName="com.android.deskclock"        launcher:className="com.android.alarmclock.AnalogAppWidgetProvider"        launcher:screen="2"        launcher:x="1"        launcher:y="0"        launcher:spanX="2"        launcher:spanY="2" />   <!--folder of holding shortcut-->    <folder        launcher:title="@string/fx_app"        launcher:screen="2"        launcher:x="3"        launcher:y="3"><favorite        launcher:packageName="com.android.calendar"        launcher:className="com.android.calendar.AllInOneActivity"         /> ......</folder>  ......  <!-- Hotseat (We use the screen as the position of the item in the hotseat) -->  <favorite        launcher:packageName="com.android.contacts"        launcher:className="com.android.contacts.activities.DialtactsActivity"        launcher:container="-101"        launcher:screen="0"        launcher:x="0"        launcher:y="0" />   ......</favorites>
   xml文件中的各个元素的定义介绍:

    <favorites/>:定义Workspace和Hotseat中可加载的资源。其子元素 有<favorite/>、<appWidget/>、<folder/>。

    <favorite/>:定义Workspace和Hotseat中加载显示的快捷方式(shortcut),该元素有如下属性:

                        packageName:快捷方式对应应用的包名;

                        className:快捷方式对应应用的类全名;

                        screen:该快捷方式的位置在Workspace界面的第几页数;

                       x:该快捷方式的位置在Workspace界面初始x轴值(默认情况为0-3,即Workspace横排方向可放四个快捷图标,一个快捷图标占用一个晶格);

                       y:该快捷方式的位置在Workspace界面初始y轴值(默认情况为0-3,即Workspace竖排方向可放四个快捷图标,一个快捷图标占用一个晶格);

                        container:定义快捷方式所在的界面类型(Workspace或Hotseat),container为-101时,说明该快捷方式在Hotseat界面。(Hotseat界面的快捷方式默认情况下x轴取值范围为0-3,y轴只能为0)。

   <appWidget/>:定义Workspace界面加载显示的小部件,该元素有如下属性:                    

                        packageName:小部件对应应用的包名;

                        className:小部件对应应用的类全名;

                        screen:该小部件的位置在Workspace界面的第几页数;

                        x:该小部件的位置在Workspace界面初始x轴值;

                        y:该小部件的位置在Workspace界面初始y轴值;

                        spanX:小部件在x轴方向上扩展的倍数(小部件是可扩展的,一般扩展为单个晶格的倍数);

                       spanY小部件在y轴方向上扩展的倍数。

  

  <folder/>:定义Workspace或Hotseat界面加载显示的文件夹。

                    title:文件夹的名字;              

                    x:该文件夹的位置在Workspace界面初始x轴值;

                    y:该文件夹的位置在Workspace界面初始y轴值;

                    screen:该小文件的位置在Workspace界面的第几页数;

                    ontainer:定义文件夹所在的界面类型;


1 0
原创粉丝点击