【Android】UI开发之handler应用


先上段代码吧java

package com.example.handlerdemo;

import android.app.Activity;
import android.content.res.Resources.Theme;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

    myHandler mHandler;
    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(this);

        // 【1】当建立一个新的Handler实例时, 它会绑定到当前线程和消息的队列中,开始分发数据
        // [2]Handler有两个做用
        // <1>定时执行Message和Runnalbe 对象
        // <2>让一个动做,在不一样的线程中执行
        mHandler = new myHandler();
    }

    /**
     * 接受消息,处理消息 ,此Handler会与当前主线程一块运行
     * 
     * @author huangc 继承Handler类而且重写handleMessage方法 *
     *         子类须要继承Handler类,并重写handleMessage(Message msg) 方法, 用于接受线程数据
     */
    class myHandler extends Handler {

        public myHandler() {
            super();
            // TODO Auto-generated constructor stub
        }

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            Log.e("huangc", " handleMessage!!! ");
            Bundle b = msg.getData();
            Log.e("huangc", "MSG get!!!!=" + b.get("MSG"));
        }

    }

    /**
     * @author huangc 在Android UI主线程外写一个单独的线程
     */
    class MyThread implements Runnable {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            Log.e("huangc", " Runnable!!! ");
            try {
                Thread.sleep(1000);
            } catch (Exception e) {
                // TODO: handle exception
            }
            Message msg = new Message();
            Bundle b = new Bundle();
            b.putString("MSG", "OK");
            msg.setData(b);
            // 该线程在执行过程当中向handler发送消息
            MainActivity.this.mHandler.sendMessage(msg);

        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        int id = arg0.getId();
        if (id == R.id.button1) {
            // 【2】新起一个线程,跑起来
            MyThread mThread = new MyThread();
            new Thread(mThread).start();

        }

    }
}
相关文章
相关标签/搜索