RemoteViews跨进程UI更新工具

Android 的通知和桌面小部件,其实多人都忽略了一个蛮重要的东西——RemoteViews。它的核心作用就是帮你跨进程更新 UI,尤其在做 Widget 和通知的时候,能省不少事。你只需要把 UI 的操作封装好,它就能帮你传到系统那边去,响应也快,代码也简单。像setTextViewTextsetImageViewResource这些方法你应该都用过,和操作普通布局差不多。

RemoteViews 的用法也不难,初始化的时候指定布局 ID,比如:

RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.widget_layout);

就可以开始设置属性了,像这样改文字:

remoteViews.setTextViewText(R.id.text_view_id, "Hello, RemoteViews!");

RemoteViews 支持常见的布局和 View 操作,比如LinearLayoutImageViewButton这些都没问题。就是别想着加自定义 View,它不认,AdapterView 那种复杂点的也不行。

更新 Widget 也挺简单,用AppWidgetManager就行:

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);

通知这块也类似,尤其是想自定义通知样式的时候,RemoteViews 出场率高:

Notification notification = new NotificationCompat.Builder(context)
    .setContent(remoteViews)
    .build();

不过也有坑,RemoteViews 是远程执行的,不能动态添加 View,也不能搞复杂动画什么的,老老实实用它支持的那一套比较稳。

如果你最近在搞 Widget 或者想自定义通知界面,RemoteViews 绝对是个你绕不开的家伙,学会用它,能帮你省不少力气。

zip 文件大小:12.5MB