ThreadLocal、HandlerThread、Looper区别

1.前言

Android中非UI线程(WorkThread)不能操作UI线程(MainThread)

handler 发送Message 给MessageQueue,Looper 来轮询消息,如果有Message,然后再发送给Handler,Handler 拿到消息就可以所在的线程执行了。

2.ThreadLocal

Thread这个类有一个变量:ThreadLocal.ThreadLocalMap threadLocals ,这是一个map的数据结构,里面的元素的key就是ThreadLocal,value就是我们自定义的一些目标类。我们可以在自己的多线程类中定义好几个ThreadLocal,然后每一个ThreadLocal put一个特定的目标类,然后以后可以用ThreadLocal get到目标类(用自己作为Thread里map的key),因为每个Thread有自己独自的map,所以这样可以实现每个线程有自己的LocalThread,并且一个Thread里可以有多个LocalThread。

查看更多

分享到 评论

RxJava 学习

1.向前辈致敬

给Android开发者的RxJava详解,这篇文章讲解详细,如果耐心看完,相信肯定收获不小

本篇博文用作学习RxJava过程中,记录知识和心得,如有冒犯还请见谅!

2.简单介绍

RxJava是通过一种扩展的观察者模式来实现的。
RxJava有四个基本概念:Observable(可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable和Observer通过subscribe()方法实现订阅关系,从而Observable可以在需要的时候发出事件来通知Observer。

查看更多

分享到 评论

Android手机定位服务

1.LocationListener使用

优先使用网络定位服务,当GPS服务不可用则跳转到手机位置服务设置页面

查看更多

分享到 评论

Android Webview总结,不断更新中 :(

1.Android Webview的坑

  • 1.webview再次加载页面空白

    • 1.可以关闭掉硬件加速

    • 2.不关闭硬件加速的情况下:在关闭Acivity之前手动调用下面方法,

    查看更多

分享到 评论

Gson解析使用总结

1.Gson解析总结,就两种情况

Gson 是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个JSON字符串转成一个Java对象,或者将Java对象转成一个JSON字符串。
使用Gson来解析时,总结一下,就两句话:

  • 1.遇到“{”字符,表示单个对象,直接用XXXBean.class类去映射
  • 2.遇到“[”字符,表示对象数组,要用XXXBean[].class或list去映射

查看更多

分享到 评论

七牛android使用总结

1.在android上实现对七牛空间操作

在android上实现对七牛空间的各种操作,包括list,delete,upload,download。支持私有空间

注意:官方不建议开发者把AccessKey和SecretKey放在前端的java文件里,最好还是有一台应用服务器

如果只是想尝试一下,好吧:) 代码中都有说明,直接上代码

查看更多

分享到 评论

android JNI学习① 基础知识

本文只是用来记录,写的不好还请见谅。

1.JNI介绍

JNI概念 : Java本地接口,Java Native Interface, 它是一个协议, 该协议用来沟通Java代码和外部的本地C/C++代码, 通过该协议 Java代码可以调用外部的本地代码, 外部的C/C++ 代码可以调用Java代码;

C和Java的侧重 :

  • C语言 : C语言中最重要的是 函数 function;
  • Java语言 : Java中最重要的是 JVM, class类, 以及class中的方法;

C与Java如何交流 :

  • JNI规范 : C语言与Java语言交流需要一个适配器, 中间件, 即 JNI, JNI提供了一种规范;
  • C语言中调用Java方法 : 可以让我们在C代码中找到Java代码class中的方法, 并且调用该方法;
  • Java语言中调用C语言方法 : 同时也可以在Java代码中, 将一个C语言的方法映射到Java的某个方法上;
  • JNI桥梁作用 : JNI提供了一个桥梁, 打通了C语言和Java语言之间的障碍;

查看更多

分享到 评论

android JNI学习② JNI调用过程

1.Android JNI调用过程

1.1 由Android系统加载的JNI

Android系统在启动启动过程中,先启动Kernel创建init进程,紧接着由init进程fork第一个横穿Java和C/C++的进程,即Zygote进程。Zygote启动过程中会AndroidRuntime.cpp中的startVm创建虚拟机,VM创建完成后,紧接着调用startReg完成虚拟机中的JNI方法注册。

查看更多

分享到 评论