zoukankan      html  css  js  c++  java
  • 桌面小部件AppWidgetProvider简单分析

    1、一般桌面小部件涉及到的类

    1. AppWidgetProvider :BroadcastRecevier子类,用于接收更新,删除通知
    2. AppWidgetProvderInfo:AppWidget相关信息(大小,更新频率等),xml形式
    3. AppWidgetManger:AppWidget管理类,用于向provider发送消息
    4. RemoteViews:可以在其他进程中运行的类,用于向provider发送通知。
    5. RemoteViewsService : 是一个远程的服务适配器 可以请求RemoteViews,管理RemoteViews的服务.
    6. RemoteViewsFactory : 提供了RemoteViewsFactory用于填充远程集合视图。

    2、RemoteViewsService分析:

    1. RemoteViewsService是一个抽象类,继承了Service,底层中有IRemoteViewsFactory.aidl,且发现该Service中的IBinder是通过AIDL实现的,类中定义了接口RemoteViewsFactory,接口中的方法通过AIDL与其进程进行通讯,即跨进程通信。当有多个RemoteViewsFactory时,存储在HashMap sRemoteViewFactories中便于统一管理
    2. 故当我们的widget中包含ListView,Gridview等集合视图的时候.我们就需要借助一个类RemoteViewsService,继承RemoteViewsService实现接口并复写onGetViewFactory 返回RemoteViewsFactory

    3、RemoteViews分析:

    1. RemoteViews并没有继承系统View,只是实现了Parcelable(Android特有的方式)和Filter接口。故RemoteViews实现了序列化。
    2. 底层中RemoteViews.aidl,故也是通过AIDL与其他进程通讯的,即跨进程通信

    4、AppWidgetProvider分析:

    1. AppWidgetProvider继承了BroadcastRecevier,生命周期也比较简单,可以参考demo:https://github.com/lelelongwang/TestApp 中的MyAppWidget中的log

    5、AppWidgetManager分析:

    1. 是个AppWidget工具类,单例的方式实现。可以通过getInstance()获取实例。
    我的GitHub:https://github.com/lelelongwang
  • 相关阅读:
    myBatis源码解析-二级缓存的实现方式
    手写mybatis框架-增加缓存&事务功能
    手写mybatis框架
    myBatis源码解析-配置文件解析(6)
    myBatis源码解析-类型转换篇(5)
    myBatis源码解析-反射篇(4)
    myBatis源码解析-数据源篇(3)
    myBatis源码解析-缓存篇(2)
    Linux Centos下SQL Server 2017安装和配置
    VS2019 查看源码,使用F12查看源码
  • 原文地址:https://www.cnblogs.com/longjunhao/p/10267084.html
Copyright © 2011-2022 走看看