Android多线程

来源:互联网 发布:导弹拦截 CSDN C语言 编辑:程序博客网 时间:2024/06/06 02:27

Java提供了线程类Thread来创建多线程的程序。其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象。每个Thread对象描述了一个单独的线程。要产生一个线程,有两种方法:

1.需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法; 
2.实现Runnalbe接口,重载Runnalbe接口中的run()方法。


当我们启动一个App的时候,Android系统会启动一个Linux Process,该Process包含一个Thread,称为UI Thread或Main Thread。通常一个应用的所有组件都运行在这一个Process中,当然,你可以通过修改四大组件在Manifest.xml中的代码块(<activity><service><provider><receiver>)中的android:process属性指定其运行在不同的process中。当一个组件在启动的时候,如果该process已经存在了,那么该组件就直接通过这个process被启动起来,并且运行在这个process的UI Thread中。


Android提供了四种常用的操作多线程的方式,分别是:

1. Handler+Thread2. AsyncTask3. ThreadPoolExecutor4. IntentService

Handler+Thread

Android主线程包含一个消息队列(MessageQueue),该消息队列里面可以存入一系列的Message或Runnable对象。通过一个Handler你可以往这个消息队列发送Message或者Runnable对象,并且处理这些对象。每次你新创建一个Handle对象,它会绑定于创建它的线程(也就是UI线程)以及该线程的消息队列,从这时起,这个handler就会开始把Message或Runnable对象传递到消息队列中,并在它们出队列的时候执行它们。

Handler可以把一个Message对象或者Runnable对象压入到消息队列中,进而在UI线程中获取Message或者执行Runnable对象,Handler把压入消息队列有两类方式,Post和sendMessage:

Post方式:

Post允许把一个Runnable对象入队到消息队列中。它的方法有:
post(Runnable)/postAtTime(Runnable,long)/postDelayed(Runnable,long)

对于Handler的Post方式来说,它会传递一个Runnable对象到消息队列中,在这个Runnable对象中,重写run()方法。一般在这个run()方法中写入需要在UI线程上的操作。


操作线程:

线程对象创建后,并不会马上自动运行,而是需要通过调用线程的start()方法来启动线程。

当新建一个Thread对象后,线程的状态为New,此时线程尚未开始运行。通过调用start()方法来启动线程。

线程运行过程中,遇到阻塞事件不能运行时会进入Blocked状态,当阻塞解除后,线程回到Runnable状态等待下一次运行 。

其余thread类的方法:

start(),run(),sleep(),join(),yield(),isAlive(),wait(),notify(),notifyAll()。

每个Android程序启动时,都会创建一个进程,同时在进程中创建一个主线程。

AsyncTask类是Android提供的一个轻量级的基于多线程的进行后台异步工作处理的类。

原创粉丝点击