两种活动之间有趣的沟通方式

时间:2016-03-01 16:44:18

标签: java android android-handler

第一步:

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();无法获得归档处理程序。

1 个答案:

答案 0 :(得分:0)

多态性。

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

在值为强制转换之前编写(MyHandler),只需转换引用,而不是对象。在运行时检查强制转换的有效性,如果对象不是ClassCastException或其子类,则抛出MyHandler(在您的情况下,检查通过,所以它不是问题)。