AndroidStudio 子线程通知主线程Demo

import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity {
    TextView tv = null;
    Button btn = null;
    MySelfHandler mHandler = null;
    private MyThread thread =null;


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


        //设置文本框关联
        tv = (TextView)findViewById( R.id.textView );
        tv.setText( "子线程通知主线程Demo" );


        //设置按钮关联
        btn  = (Button)super.findViewById( R.id.button );
        btn.setOnClickListener( new MyBtnOnClickListener());


        //设置消息循环
        Looper looper = Looper.myLooper();
        mHandler = new MySelfHandler(looper);
        mHandler.removeMessages(0);
    }


    private class MyBtnOnClickListener implements View.OnClickListener {
        public void onClick(View v) {
            thread = new MyThread();
            thread.start();


            btn.setEnabled( false );


            Log.e( "Message Button", "Btn Clicks" );
        }
    }//MyBtnOnClickListener


    //消息处理类 Handler **************************************
    class MySelfHandler extends Handler {


        public MySelfHandler(Looper looper){
            super(looper);
        }


        public MySelfHandler(){
            super();
        }
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Log.e( "Message Aread", "CurrentThread id:---->" + Thread.currentThread().getId() + Thread.currentThread().getName() + "<:" + msg.what + ":>" );


            tv.setText("hello world!");
            btn.setEnabled( true );
            /*
            switch(msg.what){
                case 1:
                    tvMsg.setText((String)msg.obj);
                    break;
                default:
                    Log.e(TAG,(String)msg.obj);
                    break;
            }*/
        }


    }//MySelfHandler


    //线程处理类 Thread  **************************************
    public class MyThread extends Thread {


        @Override
        public void run() {
            int iCount = 0;
            //  while( true ){
            try {
                Thread.sleep(5000);//1秒
                Looper looper = Looper.getMainLooper();
                MySelfHandler mHandler = new MySelfHandler(looper);
                mHandler.removeMessages(0);


                iCount += 1;
                //Message msg = new Message();
                Message msg = mHandler.obtainMessage();
                msg.what= iCount;


                MySelfObj mObj = new MySelfObj();
                mObj.strKey = "你好!";
                msg.obj  = mObj;
                // msg.obj= String.valueOf( iCount );
                // 将Message对象送入到main thread的MessageQueue里面
                mHandler.sendMessage(msg);


                Log.e( "Thread Aread", "CurrentThread id:---->" + Thread.currentThread().getId() + Thread.currentThread().getName() + " Times:" + iCount  );


            } catch (InterruptedException e)
            {
                e.printStackTrace();
            }
            //System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());
            //  }//while
        }//run
    }//MyThread


    //自定义消息传递数据  **************************************
    public class MySelfObj{
        public int a = 0;
        public String strKey = "hello";
        public int [] arr = { 0 , 1, 2, 3, 4};
    }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值