android子线程创建handler

package com.ifree.pay;

import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.widget.Button; import android.widget.TextView;

public class MainThread extends Activity {

private static final String TAG = "MainThread";
private Handler mMainHandler, mChildHandler;
private TextView info;
private Button msgBtn;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

// info = (TextView) findViewById(R.id.info); // msgBtn = (Button) findViewById(R.id.msgBtn); mMainHandler = new Handler(){ @Override public void handleMessage(Message msg) {    Log.i(TAG, "Got an incoming message from the child thread - "+ (String) msg.obj); // 接收子线程的消息    info.setText((String) msg.obj); } };

   new ChildThread().start();

    msgBtn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
           
            if (mChildHandler != null) {
               
                //发送消息给子线程
                Message childMsg = mChildHandler.obtainMessage();
                childMsg.obj = mMainHandler.getLooper().getThread().getName() + " says Hello";
                mChildHandler.sendMessage(childMsg);
               
                Log.i(TAG, "Send a message to the child thread - " + (String)childMsg.obj);

   }    }    });

   }

   public void onDestroy() {       super.onDestroy();    Log.i(TAG, "Stop looping the child thread's message queue");

   mChildHandler.getLooper().quit();   }

   class ChildThread extends Thread {

   private static final String CHILD_TAG = "ChildThread";

   public void run() {    this.setName("ChildThread");

   //初始化消息循环队列,需要在Handler创建之前    Looper.prepare();

   mChildHandler = new Handler() {    @Override    public void handleMessage(Message msg) {    Log.i(CHILD_TAG, "Got an incoming message from the main thread - " + (String)msg.obj);

                try {

                    //在子线程中可以做一些耗时的工作
                    sleep(100);

   Message toMain = mMainHandler.obtainMessage();    toMain.obj = "This is " + this.getLooper().getThread().getName() +". Did you send me "" + (String)msg.obj + ""?";

                    mMainHandler.sendMessage(toMain);

     Log.i(CHILD_TAG, "Send a message to the main thread - " + (String)toMain.obj);

                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        };

        Log.i(CHILD_TAG, "Child handler is bound to - "+ mChildHandler.getLooper().getThread().getName());

        //启动子线程消息循环队列
        Looper.loop();

   }   } }

转载于:https://my.oschina.net/chaloongjir/blog/180519

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值