launcher也就是我们的Home ,可以简单地把它理解为一个简化的linux GUI。作为一个GUI它首先必须完成它最本分的功能,就是它必须能提供对所有应用 程序(CATEGORY_LAUNCHER)的映射;不过作为一个GUI,它除了做好本分之外还必须是符合大众审美的美女(wallpaper);另外还必须具有良好的交互性,没有良好的交互性就像你对一位美女殷勤了半天,她却直接对无视,那结果是比较糟糕的~~
       所谓兵马未动,粮草先行,在了解launcher的细节之前,我们首先需要完成对一些知识 的扫盲。当然这些知识我们都可以在SDK guide大叔那边找到,俺可以很负责任地告诉大家,如果你把SDK guide大叔的三板斧都学会了,APK你基本就处于无敌状态了,绝对护甲+10000,最起码基础 知识是够了,其他比的就是创意了:
       1、必须比较完整地了解APK的4个部件,尤其是Activity,现在可以简单地理解Activity是一个应用程序的窗口。
       2、必须了解UI的那部分内容,这部分内容是比较多的,English一般的我看得是比较抑郁的,但如果你想设计一个符合自己审美要求的美女或者帅哥是必须得得了解的,不需要一下能完全理解,但至少出了问题你知道去哪部分查~~
       3、Resources那部分内容可以当百科全书查
       4、intent那部分内容也是需要了解比较详细的,他是和应用沟通的渠道,大家可以参考一下小斯大虾写的文档。
       5、manifest必须了解,security可以看看
       6、Graphic部分的内容是给需要更高品味的GUI设计提供的,虽然它可能主要用在游戏上面,但我觉得如果要作出够酷的GUI肯定是需要2d,3d引擎的。
       7、AppWidget可以作为了解,用的时候再翻阅
       各位路过的大虾们肯定被这么多的粮草给直接雷倒了,其实需要我们详细掌握的是1和2,其他的都可以当作百科全书,但是如果能仔细地看透了那是最好了。
       好,万事俱备只欠东风了,我们首先来看看这个Home是在啥时候由谁来启动的。这部分知识可以跳过,但是理解一下是好的,你可以了解一个APK进程是如何怀胎十月之后诞生的。可能下面说到的词汇有些生涩,所以建议先看看Android Anatomy and Physiology.pdf。
       Linux kernel启动以后会通过App_main进程来初始化android Runtime Java 运行环境,而zygote是android的第一个进程。所有的android的应用以及大部分系统 服务都是通过zygote fork出来的子进程(我现在看到的只有native的service manager不是由zygote fork出来的)。在system server中启动的若干系统服务中与我们启动进程相关的就是Acitivity Manager。

当systerm server启动好所有服务以后,系统就进入”system ready”状态,这个时候Activity Manager就登场了。Activity Manager光看代码行就知道是一个重量级的服务,它主要管理Activity之间的跳转,以及进程的生命周期。当Activity Manager发现系统已经启动好以后它就会发出一个intent:

Intent intent = new Intent(
mTopAction,
mTopData != null ? Uri.parse(mTopData) : null);
intent.setComponent(mTopComponent);
if (mFactoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL) {
intent.addCategory(Intent.CATEGORY_HOME);
}

通过这个category类型为home的intent,Activity Manager就会通过:

startActivityLocked(null, intent, null, null, 0, aInfo,null, null, 0, 0, 0, false, false);

启动Home进程了。而这个启动Home进程的过程实际上还是去通过zygote fork出的一个子进程。因此只要在manifest中具备这样的intent-filter都可以在开机的时候作为Home启动:
Java代码:

<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

多个home之间的switch会在开始的时候有个选择,至于这个选择好像是package manager来实现的,没有仔细研究过。
       好啦,了解了Lancher 是如何执行的,我们再来看看整个lancher内部构造。看看一个lancher如何构造才算是个长得对得起观众的娃:
       1、取得系统中所有安装好的应用程序,并提供能运行这些程序的映射(形象的理解就是一个一个应用程序的小图标)。这是Lancher的骨架,正所谓何谓lancher是吧~~如果它不能提供应用程序的访问,再好看也至多是一个华丽的花瓶而已,啥用米有。
       2、更好一点我们就需要为这个设计良好的骨架提供一些画皮以及一系列动画效果,就是我们的wallpaper以及一系列的图像,animation,graphic之类的。如果完成这部分工作,基本上我们的Home就基本成型了。
       3、要使得我们的GUI更具亲和性更方便使用,我们还提供一些额外的功能,比如说现在lancher实现的图标的拖动,快捷方式等等。这些都是仁者见仁智者见智的事情,取决你天马行空的设计了。

Android 自定义桌面(一)相关推荐

  1. android自定义桌面(launcher)

    有时候需要开发一个自己的桌面程序,特别是做产品开发的开发人员,android自定义桌面其实就是一个launcher,然后在相应的activity中把系统中的所有APK加载进来,显示相应的icon图标. ...

  2. android 自定义桌面,无需 root,3 个 App 帮你构建高效的 Android 桌面

    全面屏时代,所有空间都留给屏幕,所有操作都留给手势. 对于 ios 系统而言,手势操作一直是一个非常核心且细腻的操作,也就导致很多人非常摒弃 Android 的三大金刚键.对于如今越来越流行的全面屏, ...

  3. android 自定义桌面图标大小设置,手机桌面图标尺寸可以改?OriginOS重新定义个性化...

    原标题:手机桌面图标尺寸可以改?OriginOS重新定义个性化 随着安卓定制化系统同质化情况的加重,越来越多的终端厂商开始探索一场新的变革.深耕手机领域的vivo,自然也察觉到了这一点.经过不断地努力 ...

  4. Android自定义桌面墙纸

    首先我们要把一张自己喜欢的图片放到sdcard中,具体我们可以在eclipse中用鼠标点击导入,比较方便,也可以在命令行中运行: C:\Documents and Settings\Administr ...

  5. android+自定义桌面,Android桌面经典评测 Go桌面帮你自定义控制桌面

    全新的Go桌面EX版,更像是最新的Android 4.0界面样式,用户可以点击桌面上的功能图标直接进行删除.卸载.重命名的操作,还具备着更换图标的功能.而在主菜单环节,利用长按功能图标不但可以自由编排 ...

  6. android自定义桌面挂件widget用法(一)

    因公司项目需要,今天简单研究了一下桌面挂件widget的实现,写一篇总结一下思路,如有理解错的地方,望指出! 一般而言,简单的桌面挂件,如仅使用到Button, ImageView, TextView ...

  7. Launcher 记录自定义桌面

    Launcher 记录自定义桌面 自定义桌面数据的创建.更新和删除. 前置文章 <Launcher的启动过程 > < Launcher界面结构 > <Launcher拖拽 ...

  8. 在Ubuntu下为应用程序制作自定义桌面图标

    操作系统:Ubuntu 18.04 在这个案例中,我使用的是"Joplin"这款笔记程序.这是一款全平台的笔记应用程序,通吃Windows.Linux.MacOS.Android和 ...

  9. 自定义桌面launcher-android

    android定制自定义桌面launcher.launcher,也就是android的桌面应用程序.Launcher其实就是Android系统中的桌面,其实也是一个apk,通过打包后安装到系统应用中的 ...

最新文章

  1. python安装依赖失败_python - pip安装jq依赖关系失败 - SO中文参考 - www.soinside.com
  2. bootstrap解析-栅格系统
  3. 让linux启动更快的方法
  4. 对不起,Ubuntu 21.04出现了内部错误 解决办法
  5. oracle定时器定时删除30天前的数据_Redis的过期键删除策略
  6. 宝石世界1.0游戏发布
  7. php批量打印快递单,excel怎么利用vba实现批量套打快递单批量打印单据?
  8. matplotlib 第二次执行报错在 django web服务中
  9. 【渝粤教育】电大中专职业健康与安全 (3)作业 题库
  10. python循环语句while的格式_Python循环语句之while循环22
  11. Nginx进程间通讯方式
  12. mysql字段分隔符拆分_MySQL里实现类似SPLIT的分割字符串的函数
  13. 视觉SLAM十四讲学习笔记---前三讲学习笔记总结之SLAM的作用、变换和位姿表示
  14. 写得蛮好的linux学习笔记五-认识SHELL(收藏)
  15. Anaconda的安装和环境使用
  16. 思科bfd静态路由切换_配置静态路由与BFD联动
  17. android apk 反编译 工具下载,android apk反编译工具下载_android apk反编译工具官方下载-太平洋下载中心...
  18. java找不到符号 类_得到错误java:找不到符号类
  19. 微信小程序设置单个页面自定义头部为背景图
  20. 荣耀4a android art,荣耀4A拆机图解·看真相

热门文章

  1. BiSeNet:用于实时语义分割的双边分割网络-7min精简论文阅读系列-Leon
  2. openGL 平行投影和透视投影函数分析
  3. 屁股决定脑袋,思想决定高度
  4. Unity Camera 动态摄像机大小
  5. 1^3+2^3+3^3+...+n^3通项公式
  6. Linux内核驱动开发-USB热插拔信息调取
  7. 话机耳机模式进入保持状态下每隔1分钟会切换到免提模式后再切回耳机模式
  8. python:基础知识
  9. 再生医学突破 中国科学家诱导出人类全能干细胞
  10. xe10 android 浮动键盘,delphi xe10 手机内部系统相关操作(手机信息、震动、剪贴板、键盘、电话、拨号)...