Android多线程的基本用法以及异步消息处理:Message与Handler,AsyncTask
定义一个线程基本上有三种写法
1.
class NewThread extends Thread{
@Override
public void run(){
//具体工作
}
}
new NewThread().start();
class NewThread implements Runnable{
@Override
public void run(){
//
}
}
NewThread newThread = new NewThread();
new Thread(newThread).start();
new Thread(new Runnable(){
@Override
public void run(){
//
}
}).start();
我个人一般都是用第三种方法,最简单。
异步处理:Message与Handler
Message:用来在线程之间传递消息。
Handler:处理Message对象。
示例(只是表达意思):
private Handler handler = new Handler(){
public void handMessage(Message msg){
switch(msg.what){
case 1:
//
break;
}
}
}
new Thread(new Runnable(){
@Override
public void run(){
Message msg = new Message();
Msg.what = 1;
handler.sendMessage(message);//传递消息
}
}).start();
AsyncTask
class NewTask extends AsyncTask<Params, Progress, Result>
参数解释:
Params:执行任务时需要传入的参数
Progress:后台任务执行时的进度值得单位类型(没有特殊要求一般为Integer)
Result:后台任务完成时返回结果的类型
在该类中一般要重写四个方法:
doInBackground(Params… params):在后台异步执行任务,处理一些耗时的操作,比如可调用publishProgress(Progress… values)更新任务的执行进度。
onProgressUpdate(Progress… values):在doInBackground()方法中调用publishProgress()方法后将会执行该方法,可以对UI进行操作,比如进度条的更新
onPreExcute():执行后台操作前调用,可做一些界面的初始化工作,如显示进度条。
onPostExcute():doInBackground()完成后自动执行,并接受其返回值,可利用返回的数据进行一些UI操作。
执行时,
NewTask mTask = new NewTask();
mTask.execute();
注:
参考《第一行代码》而写,只是初学者对已学知识的一个总结。