第一步:
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();
无法获得归档处理程序。
答案 0 :(得分:0)
多态性。
类型为Application
的引用并不一定意味着引用的对象。对象可以是Application
或Application
的任何子类。
在值为强制转换之前编写(MyHandler)
,只需转换引用,而不是对象。在运行时检查强制转换的有效性,如果对象不是ClassCastException
或其子类,则抛出MyHandler
(在您的情况下,检查通过,所以它不是问题)。