如何向Android中的已暂停活动发送消息

时间:2016-02-11 02:00:05

标签: java android

考虑方案1:

我有activity并启动另一项活动来做某事。完成第二个活动(操作完成)后 - 我需要更新第一个活动。我知道这可以使用"启动结果"

来完成

场景#2:

我有service在后​​台运行,提取数据等。这也可以更新第一个活动。在这种情况下,活动可以是活动的,也可以暂停活动。

在iOS中我只使用NotificationCenter并且它有效。我怎样才能注册"在Activity中接收事件并确保即使活动在那一刻睡觉也会更新?我正在考虑创建全局标志并检查它们onResume,但不确定什么是正确处理这种情况的正确方法,"松散"方式是什么?

2 个答案:

答案 0 :(得分:0)

有两种常见的选择。

兼容性库提供了

LocalBroadcastManager,允许同一应用程序中的Android组件以Intent的形式发送和接收消息。它与普通广播很相似。

您还可以找到第三方"事件总线"库,这将更灵活。

答案 1 :(得分:0)

你是对的,你可以在开始第二项活动时使用startActivityForResult()。然后,在第一个活动中,覆盖onActivityResult(),您将把逻辑放入其中以接收第二个活动的结果。例如:

第一项活动

int REQUEST_CODE = 1;

Intent newActivityIntent = new Intent(this, SecondActivity.class);
startActivityForResult(newActivityIntent, REQUEST_CODE);

然后覆盖onActivityResult()

@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
    // Make sure the result is OK.
    if (resultCode == RESULT_OK) { 
        // Make sure this result is from the corresponding request.
        if (requestCode == REQUEST_CODE) { 
            // Extract your data from the intent.
            MyData myResultData = data.getExtra("my_extra"); // Generic example.
        }
    }
}

在第二个活动中,您只需收集用户完成后发回的信息,并将其放入返回意图中。

第二项活动

Intent returnIntent = new Intent();
returnIntent.putExtra("my_extra", data);

// Now set the result.
setResult(RESULT_OK, returnIntent);

// Call finish, and the return intent is passed back.
finish();

这可能是实现您想要的最简单,最简单的方法。这样,您就知道接收结果的活动在获得结果时将始终取消暂停。