三星Galaxy Tab 7.0从相机意图返回时重新启动应用程序

时间:2011-12-22 03:09:33

标签: java android galaxy-tab

我的代码在越来越小的设备(摩托罗拉Xoom,三星Galaxy Player 4.0,Kyocera Digno)上按预期工作,但对于三星Galaxy Tab 7.0,在启动ACTION_IMAGE_CAPTURE意图并拍照后,调用应用返回onDestroy(),然后调用onCreate()然后调用 onActivityResult(),最后调用onDestroy()onCreate()再次,这当然是不可取的 - 只应调用onActivityResult()

可能的线索:

  • Galaxy Tab 7.0的屏幕尺寸明显不受清单文件支持(这是我测试过的屏幕尺寸不受支持的唯一设备),因此用户可以选择scretch-to-fit或zoom-即装。两个UI都具有相同(不良)的行为。
  • 预览图片时,相机活动似乎会切换方向。我的应用程序仅支持纵向模式(较小屏幕上的编辑: - 在非xlarge屏幕上,它支持方向更改)。也许方向改变正在以某种方式摧毁我的活动。
  • 我尝试从不同的意图(电子邮件意图)启动和返回,并且在这种情况下我的应用程序不会被销毁并重新创建。

如果需要更多信息或代码示例,请与我们联系。

修改:问题已缩小为方向更改。根据Karthik的回答,设置android:configChanges="orientation"可以解决问题。唯一的问题是,我的应用程序支持xlarge屏幕上的方向更改。此设置会在这些设备上中断此功能。我已尝试使用android:configChanges="@string/config_changes"并根据屏幕大小提供不同的字符串,但现在我收到“安装错误:INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION”。根据这个Android Activity, how to override manifest's android:configChanges with Java code?,没有办法以编程方式设置它。我唯一的选择是手动处理我的应用中的所有方向更改吗?

2 个答案:

答案 0 :(得分:2)

你是对的,这是由于方向的改变。相机在Galaxy Tab中以横向模式工作 因此,您可以将android:configChanges="orientation"添加到明确文件中的<activity>标记中。

这可以解决您的问题。 onDestroy()在从相机返回时不会被调用。

答案 1 :(得分:2)

我发现我的应用程序重新启动的原因是因为设备在启动相机应用程序时耗尽了内存并且操作系统回收了我的主要活动。这不会是一个问题,除了我有一个基于片段的布局和一些片段初始化正在onCreate()完成,无论savedInstanceState。这导致自动片段恢复被丢弃,并使应用程序看起来像从一开始就重新启动,而实际上它只是试图恢复。

例如:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // add main menu -- WRONG!
    MainMenuFragment mainMenu = new MainMenuFragment();
    FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();
    ft.add(R.id.contents, mainMenu);
    ft.commit();

    if (savedInstanceState != null) {
        // <restore state>
    }
    else {
        // <initialize stuff>
    }
}

为了解决这个问题,我在savedInstanceState不为null时跳过Fragment初始化,并确保在onSaveInstanceState()中正确保存状态并在onCreate()中恢复,并实现{{}的正常处理1}}。

例如:

onActivityResult()