Android:Handler事件处理机制

来源:互联网 发布:java商城系统源码下载 编辑:程序博客网 时间:2024/06/09 20:19

Handler是什么呢:是Android提供用来更新UI的一套机制,也是一套消息处理的机制,我们可以用它发送消息,也可以通过它处理消息。


Android在设计之初,就封装了一套消息的创建、传递、处理机制。如果不遵循这样的机制,就没有办法更新UI信息的,就会抛出异常。


Handler的使用:

package com.example.handler;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends AppCompatActivity {    //第一步:声明组件    private TextView tv_handler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tv_handler = (TextView) findViewById(R.id.tv_handler);        //创建一个新的线程        new Thread(){            public void run(){                try {                    Thread.sleep(1000);                    tv_handler.setText("更新线程");                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }.start();    }}

默认情况下,Android是不允许在其他线程里面更新UI的,所以会报错:
这里写图片描述
这时,我们就需要Handler机制更新UI:

package com.example.handler;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends AppCompatActivity {    //第一步:声明组件    private TextView tv_handler;    //创建一个Handler机制    private Handler handler = new Handler();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tv_handler = (TextView) findViewById(R.id.tv_handler);        //创建一个新的线程        new Thread(){            public void run(){                try {                    Thread.sleep(1000);                    //简单实现Handler的Post方法                    handler.post(new Runnable() {                        @Override                        public void run() {                            tv_handler.setText("更新线程");                        }                    });                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }.start();    }}

这样就完成了更新UI的操作:
这里写图片描述


实现Android项目中图片的简单轮播效果:
首先需要添加一个ImageView,这很简单,不多赘述。

package com.example.handler;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends AppCompatActivity {    //第一步:声明组件    private TextView tv_handler;    //创建一个Handler机制    private Handler handler = new Handler();    private ImageView iv_handler;    //创建一个图片的数组    private int images[] = {R.drawable.ic_beenhere_black_48dp, R.drawable.ic_directions_ferry_black_36dp, R.drawable.ic_flight_black_48dp};    //创建一个索引    private int index;    private MyRunnable myRunnable = new MyRunnable();    class MyRunnable implements Runnable {        @Override        public void run() {            index++;            index = index % 3;            iv_handler.setImageResource(images[index]);            handler.postDelayed(myRunnable, 1000);        }    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tv_handler = (TextView) findViewById(R.id.tv_handler);        iv_handler = (ImageView) findViewById(R.id.iv_handler);        handler.postDelayed(myRunnable,1000);        //随便找三张图片,放到drawable中        /*创建一个新的线程        new Thread(){            public void run(){                try {                    Thread.sleep(1000);                    //简单实现Handler的Post方法                    handler.post(new Runnable() {                        @Override                        public void run() {                            tv_handler.setText("更新UI");                        }                    });                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }.start();*/    }}

利用Handler实现图片轮播,就实现了。

0 0