这几天 Android Studio 2.2 终于出了稳定版,完善了对 NDK 的支持,真可谓是「开发者的大事,大快所有人心的大好事」。
NDK 集成
这次 Android Studio 不但支持传统 NDK 项目的集成,同时也支持使用 Cmake 来组织 NDK 代码。Cmake 项目可以在 Gradle 做如下配置
这几天 Android Studio 2.2 终于出了稳定版,完善了对 NDK 的支持,真可谓是「开发者的大事,大快所有人心的大好事」。
这次 Android Studio 不但支持传统 NDK 项目的集成,同时也支持使用 Cmake 来组织 NDK 代码。Cmake 项目可以在 Gradle 做如下配置
JNI 开发中 Java 层向下传字符串比较常用的是 JNIEnv 的 GetStringUTFChars 方法将 jstring
转为 const char *
,用完后使用 ReleaseStringUTFChars 方法释放。
1 | const jchar * GetStringChars(JNIEnv *env, jstring string, |
然而使用该方法返回的字符串却并非采用标准 UTF-8 编码,而是Modified UTF-8 Strings,即一种修改过的 UTF-8 编码。
最近要读源码的时候都要到网页上找,网页跳转不仅速度慢也十分麻烦,于是打算把 AOSP 源码同步到本地。
由于我的 Mac 剩余磁盘空间只有 100 多 G 了,就用原来联想的机器(用的是 Ubuntu 16.04)同步了 24GB+ 的 AOSP 源码。并打算在上面搭建 Samba 服务,这样就可以直接在 Mac 上阅读源码了,哈哈。
Touch 事件被封装成 MotionEvent 对象来传递。
由 ACTION_DOWN 开始,经过若干次 ACTION_MOVE 并以 ACTION_UP 结束的一个事件序列称为一个 gesture。
涉及 Touch 事件处理的角色有四种:
Java 中有 java.text.DateFormat
这个类来专门处理日期格式,它的实例仅能通过三个工厂方法获取,然后就可以调用 format()
和 parse()
方法来格式化和解析了。
DateFormat.getDateInstance([int style[, Locale aLocale]])
DateFormat.getDateTimeInstance([int dateStyle, int timeStyle[, Locale aLocale]])
DateFormat.getTimeInstance([int style[, Locale aLocale]])
其中的 style 可以是 SHORT, MEDIUM, LONG 或者 FULL。
Android 中线程间通信消息机制的基本思想其实很简单:为目标线程建立一个消息循环用来“监听”消息,之后我们只要在其他线程中向目标线程发送消息就可以被目标线程接收并处理,这样就完成了两个线程之间的通信。
下面我们一步一步来分析这个机制的实现(以下源码均基于 SDK 23)。
做 Android 的同学想必对 activity 启动模式都不陌生,activity 有四种启动模式( standard
,singleTop
,singleTask
,singleInstance
),网上和一些书上也有各种讲解,但这些文章大多是针对四种启动模式进行介绍,总是在看过一段时间后就忘掉了。本文希望带你重新理解 activity 启动模式,并理解一些其他的相关概念,而不是仅仅针对四种启动模式。
之前也曾看过一些介绍 NDK 的文章,但是由于嫌(tuo)麻(yan)烦(zheng)一直没有实践过,这两天读了些文章和文档,打算把 NDK 的项目搭建的一些东西整理一下。
本文主要介绍 Eclipse 下和 Android Studio 下 NDK 开发环境的搭建。
在 Android 中,由于主线程负责维护 UI,不能被阻塞,那么在通过磁盘或者网络进行异步加载数据的时候就需要使用多线程了。以下是我整理的几种使用多线程执行异步操作的方式,如有纰漏欢迎指正。