MyHandlerDemo

package com.example.myhandlerdemo;

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

/**
 * UIHandler - 主线程: 更新UI
 * 
 * ExecHandler - 子线程: 计算加法
 * 
 * 1. onCreate中对其进行初始化
 * 2. onResume中对ExecHandler sendMessage()
 * 3. ExecHandler handleMessage()后,再sendMessage()给UIHandler
 * 4. UIHandler 在handleMessage()中更新UI
 * 
 * @author April
 * 
 */
public class MainActivity extends Activity {

    private static final String FROM = "from";
    private static final String TO = "to";

    private static final int MSG_ADD = 1;

    private UIHandler mUIHandler;
    private ExecHandler mExecHandler;
    private HandlerThread mSubThread;

    private TextView mTextView;

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

        mTextView = (TextView) this.findViewById(R.id.tv);

        //UI thread
        mUIHandler = new UIHandler();
        //sub thread
        mSubThread = new HandlerThread("execthread");
        mSubThread.start();
        mExecHandler = new ExecHandler(mSubThread.getLooper());
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("gxq", "main thread: " + Thread.currentThread().getId());
        //sub thread :add 1+2+..+100
        Message msg = mExecHandler.obtainMessage(MSG_ADD);
        Bundle bundle = new Bundle();
        bundle.putInt(FROM, 1);
        bundle.putInt(TO, 100);
        msg.setData(bundle);
        mExecHandler.sendMessage(msg);
    }

    class UIHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case MSG_ADD:
                mTextView.setText("result : " + msg.arg1);
                break;
            }
        }
    }

    class ExecHandler extends Handler {
        public ExecHandler(Looper looper) {
            super(looper);
        }

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case MSG_ADD:
                Bundle bundle = new Bundle();
                bundle = msg.getData();
                int from = (Integer) bundle.get(FROM);
                int to = (Integer) bundle.get(TO);
                int sum = add(from, to);

                Message message = mUIHandler.obtainMessage(MSG_ADD);
                message.arg1 = sum;
                mUIHandler.sendMessage(message);
                break;
            }
        }

    }

    public int add(int from, int to) {
        Log.d("gxq", "add thread: " + Thread.currentThread().getId());
        int sum = 0;
        for (int i = from; i < to; i++) {
            sum += i;
        }
        return sum;

    }
}


你可能感兴趣的:(MyHandlerDemo)