介绍在Android中任何开启多线程
Andorid的多线程操作/UI
本篇已Java为主要语言
线程
- Thread
- AsyncTask
Thread的使用
Thread子线程运行
- 创建一个类,继承Thread,并且重写run方法(如下)
1 | class MyThread extends Thread(){ |
只需要在run方法中写耗时操作即可
- 使用: MyThread.start();
- 更改写法,继承Runnable
1 | class MyThread extends Runnable(){ |
更改了写法,使用方法也需要改变,
1 | MyThread thread = new MyThread(); |
Thread子线程通知UI更改
- 首先在子线程中是不运行进行UI操作,想要进行UI操作,只能在主线程中进行操作。
- 那么,在子线程中想要更改UI,就只能通过Handler来进行UI操作
- 先介绍一下Handler
- Message :消息体,可携带一些信息,在不同线程之间进行传递数据
- Handler :消息 发送/处理 者,可通过Handler.sendMessage()来发送数据,也可以在handlerMesage中处理数据
- MessageQueue :消息队列,里面存放等待处理的消息
- Looper : MessageQueue的管家 用来开启一个无限循环,不停的查看MessageQueue中是否还有信息,如果存在,则取出给Handler进行处理。
- 代码展示
1 | public class MainActivity extends AppCompatActivity { |
AsyncTask
- 介绍:相比 Thread来说,AsyncTask将方便很多,不需要复杂的通知Handler进行UI操作,全部都可以在AsyncTask中完成
- 使用起来也很简单,创建一个类继承AsyncTask并传递3个参数即可,下面将介绍AsyncTask的3个需要重写的方法
- onPreExecute:此方法处于主线程,可进行一些UI初始化操作,比如说初始化进度条
- doInBackground:此方法处于子线程,用于进行一些耗时操作
- onProgressUpdate:此方法处于主线程,可进行UI操作,并且如果设置了返回值,将会不停的在doInBackground运行时返回结果
- 下面将以下载功能并且更新进度条为例
1 | public class AsyncTaskDome extends AppCompatActivity { |
这样子就完成了在子线程中更新UI