关于startActivityForResult()方法后Activity直接退出的问题原因和解决办法

本文分析了使用startActivityForResult()启动Activity后出现应用退出的现象,并探讨了可能的原因,涉及activity1调用activity2的情景。通过详细步骤解释如何排查和解决此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现象:

今天在做调用相机拍照然后进行一些裁剪后显示的Demo。大题思路就是这样
	private final View.OnClickListener onClickListener = new View.OnClickListener() {

		@Override
		public void onClick(View v) {
			if(v==btnPhone){ //从相册获取图片
				Intent intent = new Intent(Intent.ACTION_PICK, null);
				intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
						IMAGE_UNSPECIFIED);
				startActivityForResult(intent, PHOTO_ZOOM);
			}else if(v==btnTakePicture){ //从拍照获取图片
				Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
				intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(
						new File(Environment
								.getExternalStorageDirectory(),"temp.jpg")));
				startActivityForResult(intent, PHOTO_GRAPH);
			}

		}

	};

直接根据用户 的选择调用安卓本身的一些功能就好了

通过startActivityForResult()方法在处理完成后回调到我们这个activity就好了 很简单
但是却遇到了一个问题 就是处理完成后activity直接退出了 通过Log发现startActivityForResult根本没有被执行到
这是怎么回事呢?

原因:

   假设有activity1和activity2, activity1调用activity2

1. activity1是SingleTask模式 也就是不在前台的时候就自动被销毁了 
自然不能接收到activity2的数据 也就呈现出了直接退出的现象

    解决方法:改成标准模式
2. setResult的第一个参数对应上面onActivityResult的第二个参数,注意别把onActivityResult的第一个参数与第二个参数搞混淆了,一个是请求标记,一个是返回标记。
 解决办法:分清楚就好了 没啥好说的
3. 最近在华为的手机上面发现Activity调用startActivityForResult后返回结果时,调用的Activity都会被重新创建,也就是Activity被销毁了。 在网上经过一番查找,发现有哥们说在手机开发人员选项里面有这么一项“不保留活动”被勾上了, 一看还真是。 把那个勾去掉一切又恢复正常了。
      这个是百度到的
   










评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值