繁体   English   中英

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

[英]Samsung Galaxy Tab 7.0 restarts app on return from camera intent

我的代码在越来越小的设备(摩托罗拉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-to-fit 。 两个UI都具有相同(不良)的行为。
  • 预览图片时,相机活动似乎会切换方向。 我的应用程序仅支持纵向模式( 编辑:在较小的屏幕上 - 在非xlarge屏幕上,它支持方向更改)。 也许方向改变正在以某种方式摧毁我的活动。
  • 我尝试从不同的意图(电子邮件意图)启动和返回,并且在这种情况下我的应用程序不会被销毁和重新创建。

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

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

我发现我的应用程序重新启动的原因是因为设备在启动相机应用程序时耗尽内存,并且操作系统回收了我的主要活动。 这不会是一个问题,除了我有一个基于片段的布局和一些片段初始化正在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()恢复,并实现onActivityResult()的正常处理。

例如:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM