事件总线可以在Android应用程序中完全替换Intents吗?

时间:2014-07-23 08:03:56

标签: android events android-intent android-activity otto

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一样?

1 个答案:

答案 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);