AppWidget

AppWidget就是桌面上显示天气,日期,时间那东西。有了它有些信息你就不需要点开另外的应用去获取了。
显示信息的进程是桌面程序,而提供信息和操作响应的是各个AppWidget的应用。它们运行在不同的进程,那么怎么把一个应用中的界面和相关操作信息在另外一个进程中实例化呢?
那就又回到android进程间通信:那肯定是binder了。为了使两个应用能断开关系,android主进程专门开了一个服务线程去管理他们俩个的关系。
具体的实现等有空了再瞅瞅源码,现在来看看怎么去使用他们。
1.那个服务线程必须知道,所有App Widget的信息,那就要求每个widget必须声明自己的信息,用最普遍的xml包括布局信息;
2.当你把一个widget拖到桌面时,桌面程序需要从服务线程中获取相关信息,并实例化界面对象;
3.实例化对象时,也要实例化它的操作相关信息,如点击操作之类;
4.其实是这样的,当桌面程序要在桌面上构建实例化一个界面并绑定事件时,会先向服务请求,服务再发信息给widget,widget需要把相关信息封装(布局了,点击事件了)在RemoteView中,然后报告给服务updateAppWidget,服务再把信息给桌面,桌面才能完成构造。
5.当一个点击事件发生时,一般是要发给widget信息,因为只有通过widget才能去调用updateAppWidget去更新桌面上那个显示的界面。在桌面程序中是干涉不了那个界面的。只有两种方式可以去改变它,一是它自身,二是widget。
6.为什么在widget中不能自定义view并传递给桌面?
通过实验发现,自定义的view在桌面中是找不到该类的,因为他们位于不同的进程,那为什么TextView可以呢?!
因为它在framework中,每个应用进程都可以访问它。
这就是公司同事解决的办法,自己写了个放到了framework中。
那为什么mtk居然在自己的package下的widget中放有自定义的view呢?
有待考察。

以上是现在的总结,等有空看看源码再来个重写。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,004评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • 一、鸡汤 appwidget是android中小组件,我们经常说的widget其实是指的那些button、text...
    欢乐斗佛阅读 2,287评论 1 8
  • 上中学的时候,我一直以为将来自己会成为一个作家。 那个时候的自己,脑子里总有一些天马行空的想法,用文字把他们具象化...
    梧桐小生阅读 243评论 0 0
  • 上节课介绍了关于青少年儿童学习编程的路径,这节课开始具体介绍相关的知识。首先从code.org课程1开始学习,福乐...
    学哥量化交易学习阅读 739评论 0 0