15

所以,这个问题已经在这个论坛上以多种形式提出,但没有一个答案对我有帮助。我有一个只能在三星 Galaxy S3 上重现的错误。

我想简单地使用手机的相机拍摄和存储照片,但是在我收到 onActivityResult 的回复之前,我的 Activity 就被破坏了。这只发生在我在纵向模式下使用相机时,在横向模式下它很好。

我正在使用此代码启动相机:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, Config.ACTIVITY_TAKE_PHOTO);

在纵向模式下,我从未看到对 onActivityResult 的调用(来自 Camera 活动),我只看到在启动活动中调用了 onDestroy()。日志中没有异常或错误,也没有明显的错误导致它崩溃。

我看过一些帖子建议将“android:configChanges="orientation|keyboardHidden"” 添加到清单中,并做很多其他事情来管理使用相机时发生的方向变化,但到目前为止没有任何帮助。

有没有其他人解决过这个问题?

4

2 回答 2

21

如果您的目标超出 API 级别 13,添加

android:configChanges="orientation|keyboardHidden"

到 Manifest 是不够的。

从Android 文档中检查此摘录

注意:如果您的应用程序以 API 级别 13 或更高级别为目标(由 minSdkVersion 和 targetSdkVersion 属性声明),那么您还应该声明“screenSize”配置,因为当设备在纵向和横向之间切换时它也会改变。

因此尝试添加

android:configChanges="orientation|keyboardHidden|screenSize"

到您的清单文件。这应该可以解决您的问题。

于 2013-10-14T04:56:40.677 回答
1

Android 在某些场景下可以调用 destroy() 方法。一种是当我们使用方法finish() 时。另一种方法是使用 Activity 类中的方法 isFinishing ()。如果真的是finalize就可以finalize自己的资源,否则,你可以保留分配一个继承Application的类的值

@Override
protected void onDestroy() {

    final YourApp app = (YourApp) getApplicationContext();
    if (app != null && isFinishing()) {
        app.finalizeAppResources();
    }

    // ...

    super.onDestroy();
}
于 2013-09-12T14:23:05.677 回答