考虑方案1:
我有activity
并启动另一项活动来做某事。完成第二个活动(操作完成)后 - 我需要更新第一个活动。我知道这可以使用"启动结果"
场景#2:
我有service
在后台运行,提取数据等。这也可以更新第一个活动。在这种情况下,活动可以是活动的,也可以暂停活动。
在iOS中我只使用NotificationCenter
并且它有效。我怎样才能注册"在Activity中接收事件并确保即使活动在那一刻睡觉也会更新?我正在考虑创建全局标志并检查它们onResume
,但不确定什么是正确处理这种情况的正确方法,"松散"方式是什么?
答案 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();
这可能是实现您想要的最简单,最简单的方法。这样,您就知道接收结果的活动在获得结果时将始终取消暂停。