在android应用中,完全摆脱意图系统,只使用事件总线(otto,greenrobot)是可能的吗?例如,是否有可能仅通过事件总线来实现这一点,而根本不打算:

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(RESULT_OK,returnIntent);
finish();

如果我使用事件总线,它会自动恢复正确的活动并将其带到最前面吗?

最佳答案

到目前为止,我找到的唯一解决方案是一套实用方法,即混合了GreenRobot的意图和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);
    }
}

在我的第一个活动中,我称之为:
ActivityUtils.startForResult(this, SecondActivity.class, new MyParam("abc", 123));

在第二个活动中,我打电话给:
MyParam param = ActivityUtils.getParameter(MyParam.class);

当我完成第二个活动时:
ActivityUtils.returnSuccessfulResult(this, new MyResult("xyz"));

然后在第一个事实中:
MyResult result = ActivityUtils.getParameter(MyResult.class);

09-12 22:15