繁体   English   中英

两项活动之间有趣的交流方式

[英]An interesting way of communication between two activities

第一步:

public class MyHandler extends Application {
    private Handler handler = null;

    public Handler getHandler() {
        return handler;
    }

    public void setHandler(Handler handler) {
        this.handler = handler;
    }

}

下一步:在活动A中:

MyHandler myHandler = (MyHandler)getApplication();
    Handler handler = new Handler(){

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            if(msg.what == 0x123)
                progressDialog.dismiss();
        }
    };
    myHandler.setHandler(handler);

在活动B中:

MyHandler myHandler = (MyHandler)getApplication();
Handler handler = myHandler.getHandler();
handler.sendEmptyMessage(0x123);

尽管两个myHandler的引用相同,但是我们使用(MyHandler)将Application更改为MyHandler。Application没有处理程序字段,为什么应用程序可以保留字段处理程序? 因为我认为在活动B中, MyHandler myHandler = (MyHandler)getApplication(); 无法获取字段处理程序。

多态性。

引用的类型为Application并不一定意味着引用的对象是。 该对象可以是Application或的任何子类Application

(MyHandler)值之前是铸件 ,并且简单地转换基准 ,而不是对象 在运行时检查MyHandler的有效性,如果对象不是MyHandler或其子类,则抛出ClassCastException (在您的情况下,检查通过,因此没有问题)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM