在activity之间传递handler(二)

来源:互联网 发布:ubuntu java环境搭建 编辑:程序博客网 时间:2024/06/11 23:48

续 “在activity之间传递handler(一)”~
部分转自 http://www.devdiv.com/home.php?mod=space&uid=166195&do=blog&quickforward=1&id=42912

如果把handler定义为static,它的子成员变量和子方法都要是static属性。一旦activity接收到handler,要处理的事件变多,则大量的变量和函数都成为static类型了,这样非常不利于代码的独立性和隐私性。这是我在研究安卓系统蓝牙通信技术时遇到的问题,所以要考虑用其它的方式在activity之间传递handler。
用定义application的方式传递handler可以保持代码的独立性,方法步骤如下。要传递handler的activity为FirstActivity和SecondActivity。
1.定义自己的application,并在manifest.xml文件中申明。

public class CustomApplication extends Application{    private static final String VALUE = "Harvey";        private String value;    private Handler mHandler;        @Override    public void onCreate()    {        super.onCreate();        setValue(VALUE); // 初始化全局变量    }        public void setValue(String value) //该方法用于测试application的功能特性    {        this.value = value;    }        public String getValue()    {        return value;    }    //该方法用于保存要传递的handler    public void setHandler( Handler handler) {        this.mHandler = handler;    }    //该方法用于获取要传递的handler    public Handler getHandler() {        return mHandler;    }}

在manifest.xml文件中,只要改application,确切地说只要加上应用名称就可以了。

android:name = "CustomApplication"

2.在FirstActivity中定义handler,并重写handleMessage方法。

private Handler mHandler = new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what){                case REQUEST_CODE:                    Log.e("handler","The message from the SecondActivity is: " + msg.obj.toString());            }        }    };

然后用前面定义的application保存定义的mHandler。

app.setHandler( mHandler );

3.在SecondActivity中获取mHandler,并用该handler获取message发送回target 即 FirstActivity。

mHandler = app.getHandler();String str = "message about handler in the SecondActivity";mHandler.obtainMessage(FirstActivity.REQUEST_CODE, 2, 3, str).sendToTarget();

4.在FirstActivity里面会接收到消息。

附:
前面的程序中,在FirstActivity里面改变CustomApplication中变量value的值,在SecondActivity中,该值也改变。原来是因为: Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。
另外,application是在activity之前加载的,程序运行就会加载application的程序。

源码 http://download.csdn.net/download/sherry_up/9400052

0 0
原创粉丝点击