Android HandlerThread使用总结

本文详细介绍了HandlerThread类的作用及使用方法,HandlerThread是一个专门用于处理Hanlder消息的线程,能够保证消息的安全处理,并且提供了创建Looper的方法。文章通过示例展示了如何在Android应用中创建并利用HandlerThread来实现后台任务的异步处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HandlerThread 的官方解释:

/**
 * Handy class for starting a new thread that has a looper. The looper can then be
 * used to create handler classes. Note that start() must still be called.
 */

HandlerThread类是一个线程专门处理Hanlder的消息,依次从Handler的队列中获取信息,逐个进行处理,保证安全,不会出现混乱引发的异常。HandlerThread继承于Thread,所以它本质就是个Thread。与普通Thread的差别就在于,它有个Looper成员变量。

使用方法:

public class DemoActivity extends Activity {

    private HandlerThread handlerThread;
    private ImageView imageView, imageView1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo);
        initial();
    }

    private void initial() {
        imageView = (ImageView) findViewById(R.id.image1);
        imageView1 = (ImageView) findViewById(R.id.image2);

        handlerThread = new HandlerThread("DemoActivity");
        handlerThread.start();
        final Handler handler = new Handler(handlerThread.getLooper());

        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                handler.post(new MyRunnable(1));
                handler.post(new MyRunnable(2));
            }
        });
    }


    class MyRunnable implements Runnable {
        int pos;

        public MyRunnable(int pos) {
            this.pos = pos;
        }

        @Override
        public void run() {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (pos == 1) {
                imageView.post(new Runnable() {
                    public void run() {
                        imageView.setBackgroundResource(R.drawable.ic_launcher);
                    }
                });
            } else {
                imageView.post(new Runnable() {
                    public void run() {
                        imageView1.setBackgroundResource(R.drawable.ic_launcher);
                    }
                });
            }
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        handlerThread.quit();
    }
}

HandlerThread适合在只需要在一个工作线程(非UI线程)+任务的等待队列的形式,优点是不会有堵塞,减少了对性能的消耗,缺点是不能同时进行多任务的处理,需要等待进行处理。处理效率较低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值