[英]Parent Activity is recreating after calling Camera intent in Android Oreo
[英]Android: Activity getting Destroyed after calling Camera Intent
我有两个活动(A1,A2)。 A1 调用 A2 并从 A2 我调用相机意图如下
launchIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
launchIntent.putExtra(MediaStore.EXTRA_OUTPUT,photoPath);
startActivityForResult(launchIntent,CAMERA_REQUEST);
它打开相机,我可以拍照。 但是一旦我单击保存按钮(s3 中的勾选按钮),问题就出现了,我的onActivityResult没有被调用,而是 A2 的 onDestroy 方法被调用。 我在 onActivityResult fn 中几乎没有逻辑要完成。
我已经在 Stackoverflow 中阅读了一些关于此的帖子,但我无法从中获得有用的输出。我的第二个活动(A2)有这样的清单
android:configChanges="keyboardHidden|orientation|locale"
android:screenOrientation="portrait
注意:在 HTC One X 中,我的 onActivityResult fn 被调用,但在我的 S3 中,第二个 Activity(A2) 被销毁
请分享您对此的想法。 提前致谢
启动相机需要大量内存。 因此,在内存不足的设备上,android 系统会关闭在后台运行的活动,因此调用 onCreate()。 由于您提供的此光路变为空,您将无法获得保存的图像。
解决方案是在系统破坏您的活动时保存光路,然后再次恢复它。
@Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
outState.putString("photopath", photopath);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
if (savedInstanceState != null) {
if (savedInstanceState.containsKey("photopath")) {
photopath = savedInstanceState.getString("photopath");
}
}
super.onRestoreInstanceState(savedInstanceState);
}
如果您在 Fragment 上执行此操作。
@Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
outState.putString("photopath", photopath));
super.onSaveInstanceState(outState);
}
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
// TODO Auto-generated method stub
if (savedInstanceState != null) {
if (savedInstanceState.containsKey("photopath")) {
photopath = savedInstanceState.getString("photopath");
}
}
super.onViewStateRestored(savedInstanceState);
}
确保您没有打开“不保留活动”开发人员设置,因为它会破坏您要离开的活动。
相机应用程序需要大量内存,为了释放内存,操作系统必须杀死后台应用程序,包括您的应用程序。 这对于所有 Android 应用都是正常的。 当相机应用程序返回时,您的活动将被重新创建。 要保留活动状态信息,请覆盖onSaveInstanceState()
以存储您的数据并在onCreate()
读取它们。
当我调用 Camera Intent 时,我的 Activity 有很多任务正在运行。我有 GPS 位置侦听器,还有更多任务。
当它从 Camera Intent 返回时,我需要在地图上拍摄图像的位置添加标记。所以如果用户拍摄了多张照片,它应该为每张照片显示标记。
如果每次我调用 Camera Intent 时它都会破坏我的 Activity,我之前拥有的有关标记及其位置的所有信息都将丢失。而且,我将不得不再次初始化地图。 这对我的应用程序来说是一个大问题。
是的,只有当我在横向模式下拍照时才会发生这种情况。 如果我拍人像照片,到目前为止一切都很好..
我会尝试使用android:configChanges="orientation|screenSize"
作为建议here..希望它会有所帮助!
对我来说,当我在开发人员模式下启用一个名为“不要保留活动”的选项时会发生这种情况。 在我取消选中它后,从图库或相机应用程序中选择图片时不会重新创建活动。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.