浅谈coding学堂之Android多线程及异步处理

2016-03-24 13:17:33 499浏览

         在Android开发程序当中,或多或少使用了工作者线程,对于零基础学员来说都不知道什么是多线程,线程程序的“麻烦”源于它很抽象、与单线程程序运行模式不同,那么,下面我们来介绍一下Android多线程及异步处理吧。

         1、用户态线程

         由于内核并没有对多线程进程的支持,因此,内核中只有单线程进程的概念, 而多线程进程是通过一个和应用程序连接的函数库实现的。由于内核没有轻量 级进程(线程)的概念,因此它不能独立的对之进行调度,而是由一个线程运 行库来组织线程的调度,其主要工作在于在各个线程的栈之间调度。如果一个进程中的某一个线程调用了一个阻塞的系统调用,该进程就会被阻塞,当然该进程中的其他所有线程也同时被阻塞,因此UNIX使用了异步I/O机制。

         这种机制主要的缺点在于在一个进程中的多个线程的调度中无法发挥多处理器的优势(如上述的阻塞情况)。其优点包括:

         A、(相对于进程操作而言)某些线程操作的系统消耗大大减少。比如,对属于同一个进程的线程之间进行调度切换时不需要调用系统调用,因此将减少额 外的消耗,往往一个进程可以启动上千个线程也没有什么问题。

         B、用户态线程的实现方式可以被定制或修改以适应特殊应用的要求。这对于多 媒体实时过程等尤其有用。另外,用户态线程可以比核心态线程实现方法的默认情况支持更多的线程。

         LINUX的线程库有NPTL(Native POSIX Thread Library)和LinuxThreads。

         2、核心态线程

         这种线程的实现方法允许不同进程中的线程按照同一相对优先调度方法进行调 度。这有利于发挥多处理器的并发优势。

         3、Handler、Looper、MessageQueue介绍

         Handler用于异步消息处理,但是Handler自己并不会创建线程。一般Handler用于计划任务和线程间的通信。

         在后台线程与UI线程的交互中最常用。原理是:系统启动程序时,会自动为UI线程创建一个消息队列,和用于管理这个消息队列的Looper。在创建的后台线程时,默认是不会创建Looper和消息队列的(我们自己可以通过调用Looper.prepare()给后台线程创建Looper和消息队列)。

         通过给Handler传递不同的Looper实现向不同的线程传递信息。Looper.getMainLooper()会获得UI线程的Looper。

         4、Android多线程与界面交互的方法

         *Activity.runOnUIThread(Runnable)

         *View.post(Runnable),View.postDelay(Runnable,long)

         *Handler

         *AsyncTask

         以上就是关于Android多线程及异步处理的详细介绍,希望对大家有帮助,扣丁学堂2016年5月4号正式开Android培训第一个就业班,首期Android培训费用是9960元,正在火热报名中。

 查看更多关于“Android培训资讯”的相关文章>>

标签:

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号