应用程序从概览屏幕(最近)恢复时未调用onActivityResult

时间:2015-05-28 19:58:45

标签: android android-activity android-widget onactivityresult

我有2个活动,父母和孩子。 Parent充当Widget配置类,因为它处理APPWIDGET_CONFIGURE的intent过滤器。

选择Parent上的项目启动Child进行编辑。

Intent addNewIntent = new Intent(this,Child.class);
this.startActivityForResult(addNewIntent, EDIT_ACTIVITY_REQUEST);

Child返回结果

...
setResult(RESULT_OK, resultIntent);
     finish();

调用Parent类中的onActivityResult并处理结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
switch (requestCode){
         //EditShortcutActivity returned
         case EDIT_ACTIVITY_REQUEST:
             if(resultCode == RESULT_OK) {
...

当AppWidget添加到主屏幕时,Parent活动将从APPWIDGET_CONFIGURE意图启动。可以启动Child活动并调用Parent.onActivity结果。工作正常。

从Parent中选择一个项目后,将调用 finish()并正确配置该窗口小部件。父活动已关闭,并显示主屏幕。

现在,如果用户再次从概览屏幕(最近的应用程序选择器)选择父活动,则用户选择要编辑的项目,再次打开子活动。保存更改后,这次不会在Parent活动中调用 onActivityResult()

此外, getCallingActivity()仅在这种情况下在Child活动中返回null。

我认为这与启动Parent的Task有关,因为它是从AppWidget配置启动的。

如何可靠地调用 onActivityResult()

谢谢!

修改

我从未弄清楚为什么会发生这种情况,但我找到了解决方法。当调用Activity来配置Widget时,我通过向Intent附加标志手动将其从历史堆栈中删除。

Intent currentIntent = getIntent();
currentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
setIntent(noBackstack);

当活动从启动器正常启动时,它将显示在历史记录(概述)中并按预期工作。当启动配置AppWidget时,它不再显示在历史记录中。

希望这有助于某人。

1 个答案:

答案 0 :(得分:0)

我永远无法可靠地调用onActivityResult。我想出了一个解决办法。

在启动配置窗口小部件时从历史记录堆栈中删除活动。有关代码,请参阅编辑。