Android应用程序是否可以完全摆脱Intent系统并仅使用事件总线(Otto,greenrobot)?例如,是否可以仅使用事件总线实现此目的,而根本不使用Intents:
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(RESULT_OK,returnIntent);
finish();
如果我使用事件总线,它是否会自动恢复正确的活动并将其带到前面,就像使用Intents一样?
答案 0 :(得分:3)
到目前为止,我发现的唯一解决方案是一组实用方法,即来自greenrobot的Intents和EventBus的混合:
public class ActivityUtils {
public static void startForResult(Activity context, Class<?> destinationActivity, Object param) {
Intent intent = new Intent(context, destinationActivity);
EventBus.getDefault().postSticky(param);
context.startActivityForResult(intent, 0);
}
public static void returnSuccessfulResult(Activity context, Object result) {
Intent returnIntent = new Intent();
EventBus.getDefault().postSticky(result);
context.setResult(Activity.RESULT_OK, returnIntent);
context.finish();
}
public static <T> T getParameter(Class<T> type) {
return EventBus.getDefault().removeStickyEvent(type);
}
}
在我的FirstActivity中,我称之为:
ActivityUtils.startForResult(this, SecondActivity.class, new MyParam("abc", 123));
在SecondActivity之后我打电话:
MyParam param = ActivityUtils.getParameter(MyParam.class);
当我完成SecondActivity时:
ActivityUtils.returnSuccessfulResult(this, new MyResult("xyz"));
然后在FirstAcivity:
MyResult result = ActivityUtils.getParameter(MyResult.class);