要求:两个Activity ,A和B:在A中启动B,B中的消息要实时传递给A
开发winform的时候多幸福,在Form中声明一个Public属性或方法,直接调用就好了, Android中却没这么简单,这Activity封装的太严实了,根本找不到入口!
查了很多资料,总结下Activity之间的交互,下大致有下面几种办法:
1.startActivityForResult,缺点:只能在返回后获取B的信息(不能实现)
2.intent.putExtra:缺点:单向传递(不能实现)
3.开启Service:缺点:额外的系统开销(OK实时性很好)
4.定时查询:SharedPrefrence,Sqlite,文本文件, 缺点:没有实时性(不提)
5.广播:好像不太适合这个场景
6.最灵活的方式是使用回调,实现很简单:
1.定义一个接口
public interface Event {
public void onSomethingHappened(String msg);
}
2.定义一个事件管理类,用来绑定事件和引发事件(注意必须是静态属性和方法):
public class EventManager {
private static Event mEvent;
public static void setEventListener(Event nm){
mEvent = nm;
}
public static void raiseEvent(String msg){
mEvent.onSomethingHappened(msg);
}
}
3.在A中绑定事件并实现Event接口:
EventManager.setEventListener(event);
private Event event = new Event() {
@Override
public void onSomethingHappened(String msg) {
TextView tv = (TextView) findViewById(R.id.mainTextView);
tv.setText(msg);
}
};
4.在B中调用:
EventManager.raiseEvent(“123456789”);