Widget
1.AndroidManifast中注册的广播类型,通过pm查询保存在pms集合中,
2.launcher端通过Intent的action ‘xxxx.app.widget.update’去pms中集合查询所有应用的widget,并且为对应的widget创建Provider对象这是AppWidgetServiceImpl中的内部类,保存到AppWs中,为等待widget的更新,删除等。
3.当客户端app调用AppWidgetManager的update更新的时候传进来RemoteView对象,RemoteView是一个序列化的类。里面封装了Widget的布局的id,包名等。
4.AppWidgetServiceImpl 端接受到传来的RemoteView,根据ComponetName创建的Proviedid查询对应的Provider对象,在provider中取出对应的AppWidgetHost的CallBack binder 对象,在客户端调用update时候,更新对应的注册。
流程:
1.客户端Manifast中注册
2.PMS解析所有Manifast文件,并保存
3.launcher根据Intent的action xxx.widget.update 到pms中查询所有的注册的widget,并且根据pms返回的信息生成对应的Provider对象
4.launcher端再进行allocate动态分配id,再根据分配的id进行bind绑定id 和 provider对象到widget
5.客户端再根据包名update对应的widget

网友评论