精华内容
下载资源
问答
  • Android Launcher结构分析

    2017-05-31 15:11:58
    Launcher是系统启动后第一个启动的程序,是其它应用程序的入口,也就是我们的手机程序的桌面程序; 一、Launcher的定义及构成: 通过查看官方提供的Launcher源码可以知道其实Launcher也是一个Activity,不过它的...

    Launcher是系统启动后第一个启动的程序,是其它应用程序的入口,也就是我们的手机程序的桌面程序;

    一、Launcher的定义及构成:

    <1>通过查看官方提供的Launcher源码可以知道其实Launcher也是一个Activity,不过它的intent-fliter有点特殊;

    [html] view plain copy
    1. <activity  
    2.             Android:name="Launcher"  
    3.             android:launchMode="singleTask"  
    4.             android:clearTaskOnLaunch="true"  
    5.             android:stateNotNeeded="true"  
    6.             android:theme="@android:style/Theme.Wallpaper.NoTitleBar"  
    7.             android:screenOrientation="nosensor"  
    8.             android:windowSoftInputMode="stateUnspecified|adjustPan">  
    9.             <intent-filter>  
    10.                 <action android:name="android.intent.action.MAIN" />  
    11.                 <category android:name="android.intent.category.HOME"/>  
    12.                 <category android:name="android.intent.category.DEFAULT" />  
    13.                 <category android:name="android.intent.category.MONKEY" />  
    14.             </intent-filter>  
    15.         </activity>  

    Launcher的intent-filter中,action为intent.action.MAIN,表示该Activity是程序的主入口,但是它的category是category.HOME,和一般的app不一样,category.HOME则标识了这个Activity是一个Launcher,其实就是对应的按下HOME键所跳转到的Activity,也就是我们的桌面;

    下面我们再来看一下一个普通的App的程序主入口Activity的配置:

    <action android:name="android.intent.action.MAIN" /> 表示该类是程序主入口;
    <category android:name="android.intent.category.LAUNCHER" /> 

    category.LAUNCHER表示该Activity在Launcher上可见,所以这一个Activity会被添加到Launcher;


    <2>Launcher构成:
           HomeScreen(WorkSpace+HotSeats), Shortcut(快捷方式), LiveFolder(文件夹), AppWidget(窗口小部件), WallPaper(壁纸);  AllAppList:

          下面我们就来分别研究探讨这四个元素


    1、Shortcut
             在Launcher的配置文件里面有这样一个广播接收者用于监听添加快捷方式,查看InstallShortcutReceiver的源码:

         

    [html] view plain copy
    1. public class InstallShortcutReceiver extends BroadcastReceiver {  
    2.     private static final String ACTION_INSTALL_SHORTCUT =  
    3.             "com.android.launcher.action.INSTALL_SHORTCUT";  
    4.   
    5.     private final int[] mCoordinates = new int[2];  
    6.   
    7.     public void onReceive(Context context, Intent data) {  
    8.         if (!ACTION_INSTALL_SHORTCUT.equals(data.getAction())) {  
    9.             return;  
    10.         }  
    11.         int screen = Launcher.getScreen();  
    12.         if (!installShortcut(context, data, screen)) {  
    13.             // The target screen is full, let's try the other screens  
    14.             for (int i = 0; i < Launcher.SCREEN_COUNT; i++) {  
    15.                 if (i != screen && installShortcut(context, data, i)) break;  
    16.             }  
    17.         }  
    18.     }  
    19. }  

    从上面的核心代码可以看出,在BroadcastReceiver接收到INSTALL_SHORTCUT广播之后,会尝试在当前屏添加快捷方式,如果当前屏满了,则会尝试将快捷方式添加到其它屏;因此,当我们想主动添加一个快捷方式到屏幕的时候,其实就很简单了,发送一个广播,并且设置它的Action为INSTALL_SHORTCUT即可;但是,需要注意的是如果仅仅设置Action是不够的,因为仅仅这样做会重复添加快捷方式,如果想不重复添加,还得做一些设置,详情参考这里 http://www.linuxidc.com/Linux/2015-03/114623.htm  ;




    2、LiveFolder

              在Launcher.Java文件中,找到添加LiveFolder的入口

    [java] view plain copy
    1. // Insert extra item to handle inserting folder  
    2.                  Bundle bundle = new Bundle();  
    3.   
    4.                  ArrayList<String> shortcutNames = new ArrayList<String>();  
    5.                  shortcutNames.add(res.getString(R.string.group_folder));  
    6.                  bundle.putStringArrayList(Intent.EXTRA_SHORTCUT_NAME, shortcutNames);  
    7.   
    8.                  ArrayList<ShortcutIconResource> shortcutIcons = new ArrayList<ShortcutIconResource>();  
    9.                  shortcutIcons.add(ShortcutIconResource.fromContext(Launcher.this, R.drawable.ic_launcher_folder));  
    10.                  bundle.putParcelableArrayList(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, shortcutIcons);  
    11.   
    12.                  Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);  
    13.                  pickIntent.putExtra(Intent.EXTRA_INTENT, new Intent(LiveFolders.ACTION_CREATE_LIVE_FOLDER));  
    14.                  pickIntent.putExtra(Intent.EXTRA_TITLE, getText(R.string.title_select_live_folder));  
    15.                  pickIntent.putExtras(bundle);  
    16.   
    17.                  startActivityForResult(pickIntent, REQUEST_PICK_LIVE_FOLDER);  

    当我们长按桌面之后,选择添加文件夹,则会执行上面这段代码,在这里会先创建好一个空文件夹;


    [java] view plain copy
    1.     void addLiveFolder(Intent intent) { // RESULT_PICK_LIVE_FOLDER  
    2.         // Handle case where user selected "Folder"  
    3.         String folderName = getResources().getString(R.string.group_folder);  
    4.         String shortcutName = intent.getStringExtra(Intent.EXTRA_SHORTCUT_NAME);  
    5.   
    6.         if (folderName != null && folderName.equals(shortcutName)) {  
    7.             addFolder(!mDesktopLocked);  
    8.         } else {  
    9.             startActivityForResult(intent, REQUEST_CREATE_LIVE_FOLDER);  
    10.         }  
    11.     }  
    12.   
    13. 完成添加  
    14.   
    15.     private void completeAddLiveFolder(Intent data, CellLayout.CellInfo cellInfo,  
    16.             boolean insertAtFirst) { // REQUEST_CREATE_LIVE_FOLDER  
    17.         cellInfo.screen = mWorkspace.getCurrentScreen();  
    18.         if (!findSingleSlot(cellInfo)) return;  
    19.   
    20.         final LiveFolderInfo info = addLiveFolder(this, data, cellInfo, false);  
    21.   
    22.         if (!mRestoring) {  
    23.             sModel.addDesktopItem(info);  
    24.   
    25.             final View view = LiveFolderIcon.fromXml(R.layout.live_folder_icon, this,  
    26.                 (ViewGroup) mWorkspace.getChildAt(mWorkspace.getCurrentScreen()), info);  
    27.             mWorkspace.addInCurrentScreen(view, cellInfo.cellX, cellInfo.cellY, 11, insertAtFirst);  
    28.         } else if (sModel.isDesktopLoaded()) {  
    29.             sModel.addDesktopItem(info);  
    30.         }  
    31.     }  


    3、AppWidget:AppWidgetProvider用来在HOME页面显示插件

    实现步骤:

    1. 为AppWidget提供一个元布局文件AppWigdetProvider_Provider.xml,用来显示Widget的界面。
    2. 创建一个类继承自AppWidgetProvider,并覆写里面的相关的方法并且注册到配置文件。
    3. 为WidgetProvider创建一个引用的布局文件。

    >>1、在res/xml/文件夹下创建AppWigdetProvider_Provider.xml文件

    [html] view plain copy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"  
    3.   android:initialLayout="@layout/main"  <!-- android:initialLayout 设置引用的布局文件 -->  
    4.   android:minHeight="50dip"  
    5.   android:minWidth="50dip"  
    6.   android:updatePeriodMillis="5000" > <!-- 设置更新时间,单位为毫秒 -->  
    7. </appwidget-provider>  


    >>2、修改MainActivity继承自AppWidgetProvider并覆写里面的一些方法,实际上AppWidgetProvider就是一个BroadcastReceiver;

    [java] view plain copy
    1. public class MainActivity extends AppWidgetProvider {  
    2.   
    3.     @Override  
    4.     public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {  
    5.         super.onUpdate(context, appWidgetManager, appWidgetIds);  
    6.         Timer timer = new Timer();  
    7.         timer.scheduleAtFixedRate(new LYTimeTask(context, appWidgetManager), 150000);  
    8.     }  
    9.   
    10.     private class LYTimeTask extends TimerTask {  
    11.         RemoteViews remoteViews;  
    12.         AppWidgetManager appWidgetManager;  
    13.         ComponentName widget;  
    14.   
    15.         @Override  
    16.         public void run() {  
    17.             Date date = new Date();  
    18.             Calendar calendar = new GregorianCalendar(20130724);  
    19.             long days = (calendar.getTimeInMillis() - date.getTime()) / 1000 / 86400;  
    20.             remoteViews.setTextViewText(R.id.worldcup, "还剩下" + days + "天");  
    21.             appWidgetManager.updateAppWidget(widget, remoteViews);  
    22.         }  
    23.   
    24.         public LYTimeTask(Context context, AppWidgetManager appWidgetManger) {  
    25.             super();  
    26.             this.appWidgetManager = appWidgetManger;  
    27.             remoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_main);  
    28.             widget = new ComponentName(context, MainActivity.class);  
    29.         }  
    30.     };  
    31. }  

    >>3、为Widget创建一个显示用的布局文件:main.xml

              
    [html] view plain copy
    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    2.   android:layout_width="match_parent"  
    3.   android:layout_height="match_parent"  
    4.   android:background="@drawable/worldcup"  
    5.   android:orientation="vertical" >  
    6.   <TextView  
    7.     android:id="@+id/babybirthday"  
    8.     android:layout_width="fill_parent"  
    9.     android:layout_height="wrap_content"  
    10.     android:text="@string/message"  
    11.     android:textSize="12px"  
    12.     android:textColor="#ff0000" />  
    13. </LinearLayout>  

    >>4、修改程序自动生成的清单文件。在AndroidManifest.xml中,声明上述的AppWidgetProvider的子类是一个Receiver,并且:

    (1)、该Receiver的intent-filter的Action必须包含“Android.appwidget.action.APPWIDGET_UPDATE”;

    (2)、该Receiver的meta-data为“android.appwidget.provider”,并用一个xml文件来描述布局属性。

    [html] view plain copy
    1. <application  
    2.   android:allowBackup="true"  
    3.   android:icon="@drawable/ic_launcher"  
    4.   android:label="@string/app_name"  
    5.   android:theme="@style/AppTheme" >  
    6.   <receiver  
    7.     android:name=".MainActivity"  
    8.     android:label="@string/app_name" >  
    9.     <intent-filter>   
    10.       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /><!--广播接收过滤器-->  
    11.     </intent-filter>  
    12.   
    13.     <meta-data  
    14.       android:name="android.appwidget.provider"  
    15.       android:resource="@xml/AppWigdetProvider_Provider" /><!--AppWidgetProvider引用的Provider文件-->  
    16.   </receiver>  
    17. </application>  

    运行程序:进入WIDGETS页面,可将Widget添加到HOME页

    在AppWidgetProvider类中,还有其它相关的方法

    [java] view plain copy
    1. public class WidgetProvider extends AppWidgetProvider {  
    2.   
    3.     // 每接收一次广播消息就调用一次,使用频繁  
    4.     public void onReceive(Context context, Intent intent) {  
    5.         super.onReceive(context, intent);  
    6.     }  
    7.   
    8.     // 每次更新都调用一次该方法,使用频繁  
    9.     public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {  
    10.         super.onUpdate(context, appWidgetManager, appWidgetIds);  
    11.     }  
    12.    
    13.     // 每删除一个就调用一次  
    14.     public void onDeleted(Context context, int[] appWidgetIds) {  
    15.         super.onDeleted(context, appWidgetIds);  
    16.     }  
    17.    
    18.     // 当该Widget第一次添加到桌面是调用该方法,可添加多次但只第一次调用  
    19.     public void onEnabled(Context context) {  
    20.         super.onEnabled(context);  
    21.     }  
    22.    
    23.     // 当最后一个该Widget删除是调用该方法,注意是最后一个  
    24.     public void onDisabled(Context context) {  
    25.         super.onDisabled(context);  
    26.     }  
    27. }  

     AppWidget本质上是一个AppWidgetHostView;




    AppWidgetProvider definition
    meta-data resource to provider.xml
    provider xml to layout.xml
    create AppWidgetInfo transact();

    Launcher和AppWidget交互流程如下:

    1. Launcher 启动,开始监听
    2. Service send a broadcast
    3. myApp 接收到广播,执行onUpdate方法
    4. onUpdate方法回传RemoteViews给Service
    5. Service改变Host,updateAppWidget
    6. Launcher监听到,更新Appwidget
    展开全文
  • Launcher结构之home screen

    2010-09-10 18:01:00
    从文件launcher.xml,workspace_screen.xml可获知home screen的UI结构如下图所示: 整个homescreen是一个包含三个child view的FrameLayout(com.android.launcher.DragLayer)。 第一个child就是桌面...

    今天刚刚知道如果你的Eclipse里面的工程指向服务器里面的源码记住千万不能在Eclipse里编译~~会在服务器上的源码里多处很多的中间件这样make不了只能清除那些中间件才能编译比较麻烦

    Home screen可以说是一个手机的最重要应用,就像一个门户网站的首页,直接决定了用户的第一印象。下面对home screen做一简要分析。

    home screen的代码位于packages/apps/Launcher目录。从文件launcher.xml,workspace_screen.xml可获知home screen的UI结构如下图所示:

    整个homescreen是一个包含三个child view的FrameLayout(com.android.launcher.DragLayer)。

    第一个child就是桌面com.android.launcher.Workspace。这个桌面又包含三个child。每个child就对应一个桌面。这就是你在Android上看到的三个桌面。每个桌面上可以放置下列对象:应用快捷方式,appwidget和folder。

    第二个child是一个SlidingDrawer控件,这个控件由两个子控件组成。一个是com.android.launcher.HandleView,就是Android桌面下方的把手,当点击这个把手时,另一个子控件,com.android.launcher.AllAppsGridView就会弹出,这个子控件列出系统中当前安装的所有类型为category.launcher的Activity。

    第三个child是com.android.launcher.DeleteZone。当用户在桌面上长按一个widget时,把手位置就会出现一个垃圾桶形状的控件,就是这个控件。

    在虚拟桌面上可以摆放四种类型的对象:
    1. ITEM_SHORTCUT,应用快捷方式
    2. ITEM_APPWIDGET,app widget
    3. ITEM_LIVE_FOLDER,文件夹
    4. ITEM_WALLPAPER,墙纸。

    类Favorites(LauncherSettings.java)和类LauncherProvider定义了一个content provider,用来存储桌面上可以放置的几个对象,包括shortcut, search和clock等。

    类AddAdapter(AddAdapter.java)列出了这四个类型对象。当用户在桌面空白处长按时,下列函数序列被执行:
    Launcher::onLongClick -->
    Launcher::showAddDialog -->
    Launcher::showDialog(DIALOG_CREATE_SHORTCUT); -->
    Launcher::onCreateDialog -->
    Launcher::CreateShortcut::createDialog:这个函数创建一个弹出式对话框,询问用户是要添加什么(快捷方式,appwidget, 文件夹和墙纸)其内容就来自AddAdapter。

    类Favorites(LauncherSettings.java)和类LauncherProvider定义了一个content provider,用来存储桌面上可以放置的几个对象,包括shortcut, search和clock等。

    类DesktopItemsLoader负责将桌面上所有的对象从content provider中提取。

    线程private ApplicationsLoader mApplicationsLoader负责从包管理器中获取系统中安装的应用列表。(之后显示在AllAppsGridView上)。ApplicationsLoader::run实现:
    1)通过包管理器列出系统中所有类型为Launcher,action为MAIN的activity;
    2)对每一个Activity,
          a) 将Activity相关元数据信息,如title, icon, intent等缓存到appInfoCache;
          b) 填充到ApplicationsAdapter 中。填充过程中用到了一些小技巧,每填充4(UI_NOTIFICATION_RATE)个activity更新一下相应view。



    在Launcher::onCreate中,函数startLoaders被调用。而该函数接着调用loadApplications和loadUserItems,分别获取系统的应用列表,以及显示在桌面上的对象列表(快捷方式,appwidget,folder等)。

    Launcher上排列的所有应用图标由AllAppsGridView对象呈现。这个对象是一个GridView。其对应的Adapter是ApplicationsAdapter,对应的model则是ApplicationInfo数组。数组内容是由ApplicationsLoader装载的。
    private class ApplicationsLoader implements Runnable。

     

    转载于:https://www.cnblogs.com/hesiming/archive/2010/09/10/1823526.html

    展开全文
  • Launcher界面结构

    万次阅读 2017-03-30 17:59:05
    Launcher界面结构 Launcher UI 结构 启动器界面结构 前置文章 《Launcher的启动过程 》 前言Launcher(启动器)作为Android系统的桌面,是Android系统面向用户的窗口,Launcher在一定程度上决定了当前设备的UI...

    Launcher界面结构

    Launcher UI 结构

    启动器界面结构

    前置文章

    1. Launcher的启动过程

    前言

    Launcher(启动器)作为Android系统的桌面,是Android系统面向用户的窗口,Launcher在一定程度上决定了当前设备的UI美观、性能和体验,因为这是最直接最优先带给用户使用设备的感受。所以在UI上,Launcher应该提供给用户更多的自由,更多的自定义,因为每个用户都有装扮自己手机等设备桌面的习惯和需求,如定义应用的分类,定义应用的快捷启动方式等等。

    Launcher UI分析

    主界面

    主界面Normal Mode

    这里写图片描述

    主界面Overview Mode

    这里写图片描述

    主界面菜单(All Apps)

    这里写图片描述

    主界面Drag And Drop Mode

    这里写图片描述

    主界面Widgets View

    这里写图片描述

    设置界面

    这里写图片描述

    壁纸设置

    这里写图片描述

    Launcher UI Hierarchy

    主界面(Launcher Activity)

    这里写图片描述

    壁纸设置(WallpaperPickerActivity)

    这里写图片描述

    设置(SettingsActivity)

    这里写图片描述

    自定义控件继承关系

    这里写图片描述

    展开全文
  • 前言Launcher(启动器)作为Android系统的桌面,是Android系统面向用户的窗口,Launcher在一定程度上决定了当前设备的UI美观、性能和体验,因为这是最直接最优先带给用户使用设备的感受。所以在UI上,Launcher应该...

    前言

    Launcher(启动器)作为Android系统的桌面,是Android系统面向用户的窗口,Launcher在一定程度上决定了当前设备的UI美观、性能和体验,因为这是最直接最优先带给用户使用设备的感受。所以在UI上,Launcher应该提供给用户更多的自由,更多的自定义,因为每个用户都有装扮自己手机等设备桌面的习惯和需求,如定义应用的分类,定义应用的快捷启动方式等等。

    Launcher UI分析

    主界面

    主界面Normal Mode

    这里写图片描述

    主界面Overview Mode

    这里写图片描述

    主界面菜单(All Apps)

    这里写图片描述

    主界面Drag And Drop Mode

    这里写图片描述

    主界面Widgets View

    这里写图片描述

    设置界面

    这里写图片描述

    壁纸设置

    这里写图片描述

    Launcher UI Hierarchy

    主界面(Launcher Activity)

    这里写图片描述

    壁纸设置(WallpaperPickerActivity)

    这里写图片描述

    设置(SettingsActivity)

    这里写图片描述

    自定义控件继承关系

    这里写图片描述

    展开全文
  • android launcher结构

    2011-03-09 18:07:05
    Home screen可以说是一个手机的最重要应用,就像一个门户网站的首页,直接决定了用户的第一印象。...从文件launcher.xml,workspace_screen.xml 可获知home screen的UI结构如下图所示: [img]http://dl.ite...
  • Launcher2结构分析

    2014-07-30 11:35:00
    转载于:https://www.cnblogs.com/wzfyang/p/3877635.html
  • 首先看看Launcher的View树形结构:1.相关元素介绍:DragLayer:View根元素,处理桌面元素的拖拽。 WorkSpace:继承PagedView,处理屏幕滑动。 CellLayout:ViewGroup,处理元素的大部分处理逻辑,如获取并封装触摸...
  • Launcher3源码分析 — ui结构

    千次阅读 2014-03-04 21:34:27
    在android4.4后,nexus设备使用Google Experence作为默认的Launcher,其实它的代码就是android4.4源码...我们可以通过hierarchyviewer工具和布局文件launcher.xml来大致了解下Launcher3的UI结构launcher.xml: <Fra
  • 先从整体上对Launcher布局作一个分析,让我们通过查看Launcher.xml和使用hierarchyviewer布局查看工具两者结合的方法来对Launcher的整体结构有个了解。通过hierarchyviewer来对整个桌面做个截图,如下: 放大后...
  • 开始做Android 原生Launcher 二次开发。网上看了很多,但是资源相对比较少而且很多都不是很详细。今天开始记录自己学习和修改的笔记或者说知识点。
  • Launcher3最主要的是一个Activity,基本上所有操作都集中在这个Activity上。在Launcher.Java 当中,setContentView()的参数是R.layout.launcher,只研究下桌面竖屏的情况,源码在res/layout-port/launcher.xml。 ...
  • 说道Launcher,想必大家也都不陌生,很多人感觉很深奥的一个东西,其实他就是一个,launcher其实就是一个app,从功能上说,是对手机上其他app的一个管理和启动,从代码上说比其他app多了一个属性,就是在...
  • launcher5.0-view结构

    2015-03-02 19:30:00
    参考:http://blog.csdn.net/wdaming1986/article/details/7671318 ... 查看Launcher.xml <FrameLayout xmlns:android="http://schemas.android.com/...
  • 一、android7.x Launcher3源码解析...二、android7.x Launcher3源码解析(2)—框架结构上一篇粗略的讲了下Launcher的启动流程,主要是讲了如何启动到Launcher的,Launcher启动后的那些流程,打算讲完这篇博客后再讲。
  • Android Launcher源码研究(一) 基本结构

    千次阅读 2014-11-20 17:36:13
    Launcher 是 Android手机开启后第一个运行的 应用程序,也叫Home,或者叫做手机桌面。 本文介绍的是4.1源码的launcher2 app. Android41\packages\apps\Launcher2 首先找到主Activity...
  • Launcher3源码分析 — 主界面的UI结构

    千次阅读 2014-03-25 11:41:21
    使用android sdk里面的HierarchyViewer工具可以查看应用的布局树状图,下面是Launcher3主界面的UI结构Launcher界面中这几个组件的布局如下图所示: CellLayout就是Launcher主界面中的每个页面,Workspace...
  • Android 源码解析之原生 Launcher3 _UI 结构篇 一、Launcher简介  Launcher 是Android 系统 开机完成后,第一个启动的系统级应用,用来展示系统种所预装或安装的应用的快捷方式、小部件的列表。Launcher作为开机...
  • _launcher.xml中的结构

    2014-08-05 11:23:46
    Android系统的一大特色是它拥有的桌面通知系统,不同于IOS的桌面管理,Android有一个桌面系统用于管理和展示APP以及桌面Widget等。Android提供一个默认的桌面应 ...Android的Launcher的源码在 \packag
  • (3)Launcher3 的布局和结构

    千次阅读 2014-10-07 09:12:47
    首先你需要去 这里 下载下Launcher3的源码。这个是我从android源码里面拿出来的,修改删掉了一些东西,方便在eclipse上运行,你可以直接在手机上运行,有了代码和apk再来看说明,心理会很踏实的。 Launcher3...
  • Launcher3

    千次阅读 2015-01-06 11:45:32
    Android 4.4 (KK)开始Launcher默认使用Launcher3,Launcher3较Launcher2 UI 有部分调整,主要包括:  (1)状态栏透明,App List 透Wallpaper;  (2)增加overview模式,可以调整workspace上页面的前后顺序...
  • Launcher3--初识Launcher3

    万次阅读 2017-12-04 13:48:35
    一、Launcher简介  Launcher时开机完成后第一个启动的应用,用来展示应用列表和快捷方式、小部件等。Launcher作为第一个(开机后第一个启动的应用)展示给用户的应用程序,其设计的好坏影响到用户的体验,甚至影响...
  • Launcher作为系统的Home,从功能维度其肩负着桌面,应用管理,系统组件管理等功能。从代码角度包括UI显示及控制,Provider,和一些系统Service使用几部分。 核心类类图

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,805
精华内容 14,322
关键字:

launcher结构