# 读 Android 开发艺术探索 &8

关键词:RemoteViews / 通知栏 / 桌面小部件 /

RemoteViews 是一种远程 View,是一种远程服务,实际上和远程 Service 是一样的,RemoteViews 是一个 View 结构,可以在其它进程中显示,提供了一组操作用于跨进程更新它的界面。RemoteViews 在 Android 中的使用场景有两种:通知栏 和 桌面小部件。

通知栏和桌面小部件的开发过程都需要用到 RemoteViews,在更新界面时无法像在 Activity 里面那样去直接更新 View,因为二者的界面都运行在其它进程中,即系统的 SystemServer 进程;为了跨进程更新界面,RemoteViews 提供了一系列 set 方法,并且这些方法只是 View 全部方法的子集,RemoteViews 中所支持的 View 类型也是有限的

1. 通知栏 #

通知栏主要是通过 NotificationManager 的 notify 方法来实现,除了默认效果还可以自定义。

系统默认的样式很简单:

Notification notification = new Notification();
notification.icon = R.drawable.ic_launcher;
notification.tickerText = "hello world";
notification.when = System.currentTimeMillis();
notification.flags = Notification.FLAG_AUTO_CANCEL;
Intent intent = new Intent(this, DemoActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(this, "hello", "this is a notification.", pendingIntent);
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1, notification);

自定义的样式也很简单,通过 RemoteViews 加载这个布局文件:

Notification notification = new Notification();
notification.icon = R.drawable.ic_launcher;
notification.tickerText = "hello world";
notification.when = System.currentTimeMillis();
notification.flags = Notification.FLAG_AUTO_CANCEL;
Intent intent = new Intent(this, DemoActivity.class);
/ 'PendingIntent 表示的是一种待定的 Intent,这个 Intent 中所包含的意图必须由用户来触发'
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.layout_notification);
remoteViews.setTextViewText(R.id.msg, "hello");
remoteViews.setImageResource(R.id.icon, R.drawable.icon);
PendingIntent openActivity2PendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, DemoActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.open_activity2, openActivity2PendingIntent);
notification.contentView = remoteViews;
notification.contentIntent = pendingIntent;

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(2, notification);

2. 桌面小部件 #

桌面小部件通过 AppWidgetProvider 来实现,本质上是一个广播组件,,因此必须要注册;

<receiver
    android:name=".MyAppWidgetProvider" >
    <meta-data
        android:name="android.appwidget.provider"
        android:name="@xml/appwidget_provider_info" >
    </meta-data>

    <intent-filter>
        <action android:name="io.github.isayes.action.CLICK" />
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
</receiver>

开发步骤;
- 定义小部件界面
- 定义小部件配置信息
- 定义小部件的实现类
- 在 Manifest 文件中声明小部件

3. 关于 PendingIntent 需要知道的几点 #

  1. 表示一种 pending 状态的意图,待定、等待、即将发生的意思;
  2. PendingIntent 是在将来的某个不确定的时刻发生的,而 Intent 是立即发生;
  3. 典型使用场景是给 RemoteViews 添加单击事件,通过 send 和 cancel 方法来发送和取消特定的待定 Intent;
  4. 支持三种待定意图:启动 Activity、启动 Service 和发送广播;
  5. RemoteViews 并不支持所有的 View 类型,具体的《技术探索》P230;
  6. 没有提供 findViewById 方法,无法直接访问里面的 View 元素,而必须通过 RemoteViews 所提供的一系列 set 方法来完成,因为 RemoteViews 在远程进程中显示,没办法直接 findViewById;
  7. 事实上,大部分 set 方法是通过反射来完成的;
  8. RemoteViews 实现了 Parcelable 接口;
  9. 关于单击事件,RemoteViews 中只支持发起 PendingIntent,不支持 onClickListener 的模式;

Not End.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Android开发艺术探索》是一本深入探讨Android开发核心技术的著作,由杨扬先生所著。这本书涵盖了该领域的多个方面,从Android系统背后的设计原理,到性能优化和内存管理等实际应用中的技术,都得到了详细讲解。 这本书一共分为14个章节,每个章节都介绍了一项重要的开发技术或原则。例如,书中深入讨论了Activity和Fragment的生命周期管理,以及它们之间的通信机制。此外,还介绍了多线程编程的最佳实践和Android应用的性能优化技巧。 与其他Android开发类书籍相比,这本书强调了实践性。它提供了大量的示例代码和具体的案例分析,帮助者理解和应用所学知识。此外,该书还涉及了Android最新的开发框架和技术,如Jetpack和Kotlin语言。 《Android开发艺术探索》被广大开发者普遍认为是一本非常实用和有价值的Android开发指南。无论是初学者还是有经验的开发者,都能从中受益。这本书不仅是一本教程,更是一本帮助开发者深入理解Android设计和实现原理的指南。 总结而言,如果你是一名Android开发者,想要提升自己的技术水平并深入了解Android系统的背后运作原理,那么《Android开发艺术探索》是你值得阅的一本著作。 ### 回答2: 《Android开发艺术探索》是一本著名的Android开发书籍,全称为《Android开发艺术探索:揭秘Android系统设计的奥秘》。该书由杨辉同学编著,由电子工业出版社出版。这本书讲述了Android开发的一些高级技术和实践经验,供开发者更深入地了解Android系统设计。 这本书对于Android开发者来说非常有价值。它不仅介绍了一些基础的Android知识,还深入探讨了一些高级的主题,例如Android系统的启动流程、内存优化、性能优化等。者可以通过学习这些内容,提高自己的Android开发水平,写出更高效和稳定的应用程序。 《Android开发艺术探索》的特点在于它不仅仅是一本理论性的书籍,更注重实践性和指导性。书中提供了许多实际的案例和代码,让者能够通过实际操作来理解和掌握书中的知识。同时,它还介绍了一些常见的错误和陷阱,帮助者避免一些常见的开发问题。 总的来说,《Android开发艺术探索》是一本非常实用和有深度的Android开发书籍。者通过阅和实践可以提升自己的开发水平,了解和掌握Android系统设计的奥秘。无论是初学者还是有一定经验的开发者,都能够从这本书中收获很多。 ### 回答3: 《Android开发艺术探索》是一本非常经典的关于Android开发的书籍。该书由任玉刚著写,主要介绍了Android开发的一些技术和艺术探索。 《Android开发艺术探索》的目的是帮助开发者更好地理解Android系统和开发过程中的一些关键概念。书中详细讲解了Android系统的架构和原理,包括Activity、Service、Broadcast Receiver、Content Provider等组件的工作原理和使用方法。 该书还讨论了Android开发中的一些常见问题和难点。例如,性能优化、内存管理、UI优化等。书中提供了很多实际的案例和示例代码,帮助者更好地理解和应用这些知识。 除了技术方面的内容,该书还着重强调了Android开发中的设计思路和艺术探索。作者通过讲解一些实际的应用案例,引导者如何设计出更好的用户体验和界面设计。 总之,《Android开发艺术探索》是一本非常有价值的Android开发书籍。无论是初学者还是有一定经验的开发者,都可以从中获得很多有用的知识和经验。无论是对于技术的掌握还是对于开发思路的提升,该书都是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值