以下是本周的知识清单:
- RemoteViews
- PendingIntent
- JNI & NDK & ADB & AAPT
- 一点小感悟
1.RemoteViews
官方介绍:A class that describes a view hierarchy that can be displayed in another process. The hierarchy is inflated from a layout resource file, and this class provides some basic operations for modifying the content of the inflated hierarchy.
翻译:一个描述视图的类,该视图可以在另一个进程中显示。构造时需要制定一个layout资源文件,该类提供了一些基本的操作方法来修改所描述的视图内容。
a.作用:为跨进程生成控件和修改控件属性提供一系列方法
注意:RemoteViews只是实现了Parcelable 接口,严格讲它并不是一个View,只是一个操作类
b.使用
- 构造函数:常用的构造方法如下(包名,布局资源文件id)
public RemoteViews(String packageName, int layoutId) {
this(getApplicationInfo(packageName, UserHandle.myUserId()), layoutId);
}
- 常用方法:更多方法见开发文档
-
setTextViewText(int viewId, CharSequence text)
:设置TextView显示的文字 -
setImageViewResource(int viewId, int srcId)
:设置ImageView显示的图片 -
setOnClickPendingIntent(int viewId, PendingIntent pendingIntent)
:设置View的监听事件
-
c.应用场景:具体步骤见5.1RemoteViews的应用
- 通知:通过
NotificationManager#notify()
- 桌面小部件 :通过
AppWidgetProvider
d.优缺点:
- 优点:使用传统方式、RemoteViews方式实现跨进程更新UI的对比,通过一次IPC可实现对多个View的操作,详见Android神奇"控件"一一RemoteViews
- 缺点:支持View类型如下,不支持它们的子类和其他类型的View,更无法自定义View
FrameLayout、LinearLayout、RelativeLayout、GridLayout、AnalogClock、Button、Chronometer、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView、AdapterViewFlipper、ViewStub
推荐阅读:源码分析见Android UI之跨进程组件RemoteViews
2.PendingIntent
a.作用:是待定Intent,让意图在合适的时间再执行,而不是立即执行
b.常用构造:
-
public static PendingIntent getActivity(Context context, int requestCode, Intent intent, int flags)
:打开页面 -
public static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, int flags)
:发送广播 -
public static PendingIntent getService(Context context, int requestCode, Intent intent, int flags)
:开启服务
c.参数描述:
-
context
:上下文 -
requestCode
:PendingIntent发送方的请求码,一般设为0 -
intent
:意图,当PendingIntent发生时,效果与startActivity()、sendBroadcaset()、startService()一样 -
flags
:常见的类型如下-
FLAG_ONE_SHOT
:描述的PendingIntent只能使用一次,之后会被cancel -
FLAG_NO_CREATE
:若描述的PendingIntent不存在,直接返回null而不是创建 -
FLAG_CANCEL_CURRENT
:若描述的PendingIntent已存在,则都会被cancel,之后再创建一个新的 -
FLAG_UPDATE_CURRENT
:若描述的PendingIntent已存在,就都会被update
-
d.匹配规则:满足内部Intent相同且requestCode也相同,则两个PendingIntent是相同的
3.JNI & NDK & ADB & AAPT
a.JNI
- 全称:Java Native Interface,即Java本地接口,由Java提供
- 作用:用于Java与C/C++交互,即Java可以通过JNI调用本地的C/C++代码、本地的C/C++的代码也可以调用java代码
b.NDK
- 全称:Native Development Kit,是Android的一个工具开发包,由Android提供
- 作用:用于快速开发C、 C++的动态库,并自动将so和应用一起打包成 APK
- 关系:在AndroidStudo上通过NDK实现JNI的功能
- 使用:官方:NDK入门指南
- 实战:Android:JNI 与 NDK到底是什么?(含实例教学)
c.ADB
- 全称:Android Debug Bridge,即安卓调试桥
- 作用:是一个命令行窗口,用于电脑端与模拟器或真实设备交互
- 命令:adb操作命令集合
- 应用:adb命令打开DDMS下的文件树、DDMS下文件导出
d.AAPT
- 全称:Android Asset Packaging Tool,即Android资源打包工具
- 作用:查看、创建、更新ZIP格式的文档附件,将资源文件编译成二进制文件,存于SDK的build-tools目录下,在build scripts和IDE插件时会使用这个工具打包apk文件构成一个Android 应用程序
- 命令:Android AAPT详解
4.一点小感悟
近日最大的感受就是——年味不要太浓!年前年后那两周一直都处于“人不齐”状态、初八开工以来收红包收到手软、到处品尝同事从家乡带来的年货、出去聚餐也有了“正当”理由、元宵节的汤圆好好吃...进来感受下开工日的盛况~腾讯开工刷红包堪比“春运",沙发板凳姜茶暖宝宝全上场
这周对我年前写的代码进行了review,来了十几个大佬,虽然提前做了准备但是还是紧张,短短一个半小时真的学到很多,除了技术上的收获,也给我今后再准备类似会议提供一些启发,例如,在讲代码前要先交代好背景,不是所有人都清楚具体需求,减少解释成本;演示大纲很有必要,但也要随时准备被提问各种问题、打乱节奏;最好走个完整流程来展示代码逻辑,只看代码的改动部分很难被理解...总之第一次做review还是挺不错的体验,非常感谢小哥哥们的耐心和建议~
随着学生时代最后一个假期的结束,为期两个月的短暂的实习生活也快结束了,还要回校准备令人头大的论文,预计最后还有一篇实习周记和一篇《Android Gradle权威指南》的读书笔记,待七月毕业再回来就是有名分的鹅啦!