android基础Handler小例子

来源:互联网 发布:湖北师范大学金数据 编辑:程序博客网 时间:2024/05/29 09:06
package com.example2.wheee.myapplication;/** *  Handler *  思路:当需要一个耗时的操作,例如: 联网读取数据,或者读取本地较大的一个文件的时候, *  你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果5 *  秒钟还没有完成的话,会收到Android系统的一个错误提示  "强制关闭"。  这个时候我们 *  需要把这些耗时的操作,放在一个子线程中。 *  --Handler,接受消息,处理消息 ,此Handler会与当前主线程一块运行 * *               Message msg = new Message(); *               Bundle b = new Bundle();// 存放数据 *               b.putString("color", (num++)+"次"); *               msg.setData(b); *               这几句存放数据发送至 Handler * *               转载:http://mobile.51cto.com/aprogram-442833.htm *               RenjiaLu9527 20160625 **/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.Toast;public class MyHandlerActivity extends Activity {    Button button;    MyHandler myHandler;    int num=0;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button = (Button) findViewById(R.id.button);        myHandler = new MyHandler();        // 当创建一个新的Handler实例时, 它会绑定到当前线程和消息的队列中,开始分发数据        // Handler有两个作用, (1) : 定时执行Message和Runnalbe 对象        // (2): 让一个动作,在不同的线程中执行.        // 它安排消息,用以下方法        // post(Runnable)        // postAtTime(Runnable,long)        // postDelayed(Runnable,long)        // sendEmptyMessage(int)        // sendMessage(Message);        // sendMessageAtTime(Message,long)        // sendMessageDelayed(Message,long)        // 以上方法以 post开头的允许你处理Runnable对象        //sendMessage()允许你处理Message对象(Message里可以包含数据,)        MyThread m = new MyThread();        new Thread(m).start();    }    /**     * 接受消息,处理消息 ,此Handler会与当前主线程一块运行     * */    class MyHandler extends Handler {        public MyHandler() {        }        public MyHandler(Looper L) {            super(L);        }        // 子类必须重写此方法,接受数据        @Override        public void handleMessage(Message msg) {            // TODO Auto-generated method stub            Log.d("MyHandler", "handleMessage......");            super.handleMessage(msg);            // 此处可以更新UI            Bundle b = msg.getData();            String color = b.getString("color");            MyHandlerActivity.this.button.append(color);            //再次创建线程(测试)            MyThread m = new MyThread();            Toast.makeText(getApplicationContext(),"第 "+num+" 次新建线程",Toast.LENGTH_LONG).show();            new Thread(m).start();        }    }    /**    *      子线程,非主线程     **/    class MyThread implements Runnable {        public void run() {            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            Log.d("thread.......", "mThread........");            Message msg = new Message();            Bundle b = new Bundle();// 存放数据            b.putString("color", (num++)+"次");            msg.setData(b);            MyHandlerActivity.this.myHandler.sendMessage(msg); // 向Handler发送消息,更新UI        }    }}
0 0