Handler发送消息的过程
Handler发送消息的过程:向消息队列中插入了一条消息,MessageQueue的next方法就会返回这条消息给Looper,Looper收到消息后就开始处理了,最终消息由Looper交由Handler处理,即Handler的dispatchMessage方法会被调用,这是Handler就进入了处理消息的阶段.
查看栈顶Activity
adb shell dumpsys activity | findstr "mFocusedActivity"
使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历。
说明:keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。如果是JDK8,使用Map.foreach方法。 正例:values()返回的是V值集合,是一个list集合对象;keySet()返回的是K值集合,是一个Set集合对象;entrySet()返回的是K-V值组合集合。
RxJava ,Retrofit
RxJava 简单概括为异步,简洁. RxJava 的异步实现,是通过一种扩展的观察者模式来实现的。
Retrofit 是 Square 的一个著名的网络请求封装库。
重新apk签名,注意需要配置jdk环境变量
demo_sign.apk为签名后apk,
demo.apk为原apk,
xxx.keystore为签名文件路径
jarsigner -verbose -keystore xxx.keystore -signedjar demo_sign.apk demo.apk xxx.keystore
flush()
flush()表示强制将缓冲区中的数据发送出去,不必等到缓冲区满.
根据泛型T获取class
Type genType = getClass().getGenericSuperclass();
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
Class<T> tClass = (Class)params[0];
Gson解析集合
List<Student> studentList = GsonUtil.getInstance().fromJson(listJsonStr,
new TypeToken<List<Student>>() {}.getType());
adb强制安装apk
adb install -r xxx.apk
Java跨进程
Java中是不支持跨进程内存共享的。因此要传递对象, 需要把对象解析成操作系统能够理解的数据格式, 以达到跨界对象访问的目的。在JavaEE中,采用RMI通过序列化传递对象。在Android中, 则采用AIDL(Android Interface Definition Language:接口描述语言)方式实现。
android去掉自带padding
android:includeFontPadding="false"
查看手机imei
打开拨号键盘输入 *#06#
多线程的使用
有效利用多线程的关键是理解程序是并发执行而不是串行执行的。例如:程序中有两个子系统需要并发执行,这时候就需要利用多线程编程。
通过对多线程的使用,可以编写出非常高效的程序。不过请注意,如果你创建太多的线程,程序执行的效率实际上是降低了,而不是提升了。
请记住,上下文的切换开销也很重要,如果你创建了太多的线程,CPU 花费在上下文的切换的时间将多于执行程序的时间!