Android多线程编程

Android多线程编

为了不影响用户对软件的正常使用,我们需要将在应用的一些耗时 的操作方在一些子线程中去执行。

线程的基本用法

class MyThread extends Thread{

public void run(){

       //具体的处理逻辑

         }

}

使用它:

new MyTread().start();

为了降低耦合性,我们通常是这样使用它的:

class MyThread implement Runnable{

public void run(){

       //具体的处理逻辑

         }

}

更好的使用它:

MyThread myThread  =  new MyThread();

new myTread (myTreads).start();

使用匿名内部类的方式;

new Thraed(new Runnable(){

public void run(){

  //具体的处理逻辑

}

}).strat();

Android  不允许子线程去更新UI

我们创建一个Handler对象对UI进行操作

public  static final int UPDATE_TEXT = 1;

Handler  handler = new Handler(){

public void handlerMessage(Message msg){

swith(msg.what){

    case UPDATE_TEXT:

//进行UI更新操作

}

}

new Thraed(new Runnable(){

public void run(){

  Message message  =  new Message();

message.what  =  UPDATE_TEXT;

handler.sendMessage(message);

}

Handler 异步消息处理机制:

1.Message 线程之间传递的消息:message.what(),measge.arg1()和message.arg2().//携带一些整型数据message.obj()//携带object对象。

2.Handler 处理者。sendMessage()方法发送消息,handleMessage()接受消息。

3.MessageQueue 消息队列。存放所有通过Handler发送的消息,等待处理。每个线程中只会有一个MessageQueue对象。

4.Looper 每个线程中MessageQueue的管家。调用Looper的Loop()方法后,进入无线循环,发现MessageQueue中有消息,就会将它取出,并传递给Handler的handeMessage中。每个线程只会有一个Looper。

AsyncTask的使用:

  这是一Android帮我们封装好的用于在子线程中对UI进行操作的工具。其背后的实现原理是基于异步消息处理机制。

由于AsyncTask是一个抽象类,所以当我们使用它的时,要创建一个子类去继承它。

class MyAsyncTask entends AnyscTask<第一个泛型参数,第二个泛型参数,第三个泛型参数>{}

class myAsynctask extends AsyncTask<Void,Integer,Boolean>{

//任务开始之前执行,比如初始化控件。
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
//进行后台任务处理,完成主要的子线程任务,进行耗时操作
    @Override
    protected Boolean doInBackground(Void... voids) {
//调用该方法启动 onProgressUpdate方法进行UI更新操作
    publishProgress();
    return null;
    }
//进行UI操作
    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
    }

//doInBackground()方法结束调用,进行后续操作。比如进行任务完成提示,关闭控件等。
    @Override
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);
    }
}

启动该任务的方法:

new MyAsyncTask().execute();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值