【问题标题】:Activity killed / onCreate called after taking picture via intent通过意图拍照后调用的活动被杀死/ onCreate
【发布时间】:2012-05-11 18:22:34
【问题描述】:

我正在尝试使用意图拍照。我的问题是,有时在拍照后,我调用 startActivityForResult 的活动似乎已被破坏,因此再次调用 onCreate。

这是我点击一个imageview后拍照的代码,应该替换哪个图像:

if (!getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_CAMERA)) {
            Util.makeLongToast(R.string.lang_no_camera);
        } else {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, TAKE_ITEM_PHOTO);
        }

...

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.v(TAG, "onactivityresult called");
    if (requestCode == TAKE_ITEM_PHOTO) {
        if (data != null) {

            imageUri = data.getData();


                try {
                    img_photo.setImageBitmap(Media.getBitmap(
                            getContentResolver(), imageUri));
            } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

        } else
            Log.w(TAG, "data is null");
    }
}

所以我尝试的只是拍照并用它替换 imageview 的图像。但在某些情况下,onCreate 是在 onActivityResult 被调用之后调用的,新图像会丢失。

非常感谢您的帮助。

【问题讨论】:

标签: android android-camera android-activity android-camera-intent


【解决方案1】:

实际上,相机会导致您的 Activity 的方向发生变化,这就是您的 Activity 被销毁和重新创建的原因。

将此添加到您的清单文件中,它将防止方向更改,并且您的活动不会被破坏和重新创建。

<activity
    android:name=".YourActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:screenOrientation="portrait" >
</activity>

【讨论】:

  • 谢谢! android:configChanges="orientation|keyboardHidden" 是缺少的行! ;)
  • 感谢您的回答!我正在拥抱我的显示器
  • 另请注意,在13级以上的API中,您还应该在configChanges中添加“screenSize”。 developer.android.com/guide/topics/manifest/…
  • 我还是有同样的问题
  • 由于内存不足导致后台活动和框架终止进程,因此问题也可能出现,因此onCreate() 再次被调用!
【解决方案2】:

修复您的活动/应用程序的方向,因为当您返回/完成()活动并同时更改方向时,活动会自动刷新并重新启动。

【讨论】:

    【解决方案3】:

    好像有些手机在导入图片的时候会破坏activity,比如Galaxy S3。提到如果我的应用程序处于纵向模式,则会发生这种情况,因为图像处于横向模式。因此,清单文件中与 configChanges 相关的所有建议都不适用于这种情况。

    我最终做的不是与活动的 onDestroy 作斗争(导致在 onCreate() 之后不调用片段的 onActivityResult())而是在活动本身中实现 ​​onActivityResult() 并且在那里我可以获得图像路径。然后,我将该路径传递给片段,一旦它被创建,以供进一步处理。当然,我必须告诉我的应用,一旦它重新创建,它需要返回调用 fragmnet 来处理该图像

    【讨论】:

      【解决方案4】:

      禁用“不保留活动”开发者设置。否则它会破坏你要离开的活动。

      【讨论】:

      • 你是我的英雄!
      猜你喜欢
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多