关于Looper的使用

本文介绍了Android中主线程与子线程间的通讯方式,利用Looper、Handler及MessageQueue机制实现线程间的数据传递。

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

 我们知道,在android的线程里,是从message loop取出信息来处理的,主线程和子线程、子线程和子线程之间的通讯也是Looper来实现的,接下来我就简单介绍下Looper的使用方法。
 主线程(即UI线程)自身就有message loop,不需要创建,而其他线程就需要手动创建,使用prepare()创建loop,使用 loop()来启动loop,直到loop停止。

方法介绍:
返回应用主线程的looper

返回当前线程

loop()
在线程里运行信息队列(message queue)

myLooper()
返回当前线程的looper

返回当前线程的messageQueue对象

初始化当前线程的Looper

初始化应用主线程的Looper

quit()
退出Looper

1.主线程向子线程发信息:
首先创建一个子线程,在子线程中创建Looper并且运行,接收主线程向子线程发送的信息,并且处理。
    ChildrenLooperThread childerLooperThread=new ChildrenLooperThread();
    childerLooperThread.start();

    public class ChildrenLooperThread extends Thread{
         @Override
         public void run() {
              Looper.prepare();//创建Looper
              mHandler=new Handler(){
                    @Override
                    public void handleMessage(Message msg) {
                         // TODO Auto-generated method stub
                         Log.e("TAG", "mHandler");
                         Log.e("TAG", msg.obj.toString());//接收主线程向子线程发送的信息,并且处理。
                         super.handleMessage(msg);
                    }
              };
              Looper.loop();//运行
              super.run();
         }
    }

在主线程中向子线程发送信息
     Message msg=mHandler.obtainMessage();
     msg.obj="主线程向子线程传递数据";
     mHandler.sendMessage(msg);

2.子线程向主线程发送信息
首先创建子线程,通过主线程的handler发送信息,在主线程创建的handler的handlerMessage中处理主线程发送信息。
      MainLooperThread mainLooperThread=new MainLooperThread();
      mainLooperThread.start();

    public class MainLooperThread extends Thread{
          @Override
          public void run() {
               Message msg=mainHandler.obtainMessage();
               msg.obj="子线程向主线程传递数据";
               mainHandler.sendMessage(msg);
               super.run();
          }
    }

        mainHandler=new Handler(Looper.getMainLooper()){//通过主线程的Loope创建handler
               @Override
               public void handleMessage(Message msg) {
                    // TODO Auto-generated method stub
                    Log.e("TAG", "mainHandler");
                    Log.e("TAG", "handleMessage");
                    Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();
                    super.handleMessage(msg);
               }
        };

这样就可以在任意的2个线程间进行通讯。

    有积分链接:http://download.youkuaiyun.com/detail/jhg19900321/4561747

    无积分链接:https://code.google.com/p/my-csdn-resource/

       注:我觉得分享应该是免费的,之所以有有积分的链接,就是为了如果有朋友积分很多,那就选择有积分链接,给我些积分,让我可以下载别人的源码,如果朋友没有积分,那就可以选择无积分的链接,谢谢!




Android中的Looper类主要用于管理消息循环和消息队列。在Android中,每个线程都有一个Looper对象,它用于循环处理消息队列中的消息,以便在主线程或后台线程中处理异步任务。 使用Looper类,我们可以在Android应用程序中创建一个消息循环,并将消息动态地排队到消息队列中。然后,我们可以在消息队列中处理这些消息,以便在正确的时间和正确的上下文中执行相应的操作。 以下是使用Looper类的基本步骤: 1. 创建一个Handler对象并将其附加到当前线程的Looper。 2. 在需要发送消息的地方,使用Handler的post方法将消息发送到消息队列中。 3.Looper所在的线程中处理消息队列中的消息。 例如,下面的代码演示了如何在后台线程中使用Looper类: ``` public class MyThread extends Thread { public Handler mHandler; @Override public void run() { Looper.prepare(); mHandler = new Handler() { @Override public void handleMessage(Message msg) { // 在此处处理消息 } }; Looper.loop(); } } ``` 在这个例子中,我们创建了一个MyThread类,并在它的run方法中创建了一个消息循环和消息队列。然后,我们创建了一个Handler对象,并将其附加到当前线程的Looper中。最后,我们调用Looper的loop方法来开始处理消息队列中的消息。 使用这种方式,我们就可以在后台线程中动态地排队和处理消息,以便在正确的时间和正确的上下文中执行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值