android多线程和并发
介绍android多线程、并发相关的知识
AndroidConqueror
奋斗不止,量变引起质变
展开
-
android多线程下载
使用单线程下载文件会比较慢,如果使用n个线程,那么时间就会缩短为1/n,每个线程只下载其中的一段,都下载完以后再把这n段拼接起来就ok了。下面简单介绍一下多线程下载的原理和实现。多线程下载的关键是怎样从服务器只获取文件的一部分,而不是整个文件。这里需要设置request header的一个属性:Range。conn.setRequestProperty("Range", "bytes=" + sta原创 2016-08-29 12:01:40 · 667 阅读 · 0 评论 -
android消息机制 - Handler、Looper原理解析
android的消息机制就是指Handler、MessageQueue和Looper的工作过程。需要传递消息时,由Handler会调用MessageQueue的enqueueMessage方法将消息放入消息队列中,Looper会不断从队列里取消息,取出以后再交给Handler去处理。Handler在创建时要使用当前线程的Looper来构建内部的消息处理系统,所以如果当前线程没有Looper,就会报错原创 2016-09-09 15:24:49 · 783 阅读 · 0 评论 -
android多线程数据存储 - ThreadLocal的工作原理
定义ThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,存储以后,只能在该线程中可以获取到存储的数据,对于其他线程来说无法获取。使用场景 某些数据以线程为作用域并且在不同线程有不同的数据时。比如每个线程要使用Handler需要创建Looper,而且每个线程的Looper是不同的,所以使用ThreadLocal可以轻松的实现Looper在线程中的存取。 复杂逻辑下的对象原创 2016-09-09 16:24:55 · 1251 阅读 · 0 评论 -
AsyncTask的使用方法和原理
AsyncTask的本质实际仍是传统的线程,它封装了Thread和Handler,底层用到了线程池。它在线程池中执行后台任务,支持把执行的进度和最终结果传递给主线程并在主线程中更新UI。但是AsyncTask不适合执行特别耗时的后台任务,对于特别耗时的任务,建议直接使用线程池(原因请参考下面的工作原理分析)。使用方法AsyncTask是一个抽象的泛型类,它的泛型参数有三个:public abstra原创 2016-09-11 19:08:10 · 543 阅读 · 0 评论 -
IntentService的使用方法和原理
IntentService继承了Service,它是一个抽象类,用于执行后台的耗时任务,当任务结束后它会自动停止。由于IntentService是服务,所以它的优先级比普通的线程要高很多,所以它适合执行一些高优先级的后台任务。当使用IntentService时,我们需实现onHandleIntent(Intent intent)方法,在里面就可以执行后台任务,比如下载、访问数据库、IO操作等。 为原创 2016-09-12 15:48:33 · 756 阅读 · 0 评论 -
HandlerThread的使用方法和原理
我们如果想要在子线程中使用Handler,必须要手动创建一个Looper(原理已经在前面关于Handler和Looper的博客中介绍过:http://blog.csdn.net/whsdu929/article/details/52487605):new Thread(){ @Override public void run() { Looper.prepare();原创 2016-09-12 16:30:52 · 603 阅读 · 0 评论