`
xuanzhui
  • 浏览: 200879 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

关于onActivityResult的一些细节

阅读更多

1. onActivityResult是比onResume先调用的,而且如果onActivityResult中的code比较耗时的话,会阻塞onResume,可以通过如下的code进行测试:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.w(TAG, "on activity result start to deal with: " + requestCode);

    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    Log.w(TAG, "on activity result end");
}

public void onResume() {
    super.onResume();
    Log.w(TAG, "on resume start");
}

 

打印的次序应该是

MainActivity: on activity result start to deal with: 13

MainActivity: on activity result end

MainActivity: on resume start

 

refer onActivityResult() & onResume()

 

2. 在activity和fragment并存的时候startActivityForResult

如果在host activity中重写了onActivityResult,那么应该调用super.onActivityResult,这样才能保证fragment中的onActivityResult会被调用

通过如下片段测试:

host activity中有一个fragment,fragment通过两种方式startActivityForResult

1)

Intent intent = new Intent(getContext(), SecondActivity.class);
startActivityForResult(intent, 12);

 

2)

Intent intent = new Intent(getContext(), SecondActivity.class);
getActivity().startActivityForResult(intent, 13);

 

注意两者之间的区别,第二个显示调用了getActivity

 

并且在fragment中设置onActivityResult

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.w(TAG, "on activity result start to deal with: " + requestCode);

    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    Log.w(TAG, "on activity result end");
}

public void onResume() {
    super.onResume();
    Log.w(TAG, "on resume start");
}

 

在host activity中

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    Log.w(TAG, "on activity result start to deal with: " + requestCode);

    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    Log.w(TAG, "on activity result end");
}

public void onResume() {
    super.onResume();
    Log.w(TAG, "on resume start");
}

 

结果,如果通过方式1 startActivityForResult,会发现fragment中的onActivityResult先被调用,然后到host activity中的onActivityResult,但是host activity中获取的requestCode是一个随机值:

FirstFragment: on activity result start to deal with: 12

FirstFragment: on activity result end

MainActivity: on activity result start to deal with: 196620

MainActivity: on activity result end

MainActivity: on resume start

FirstFragment: on resume start

 

如果是方式2,fragment中的onActivityResult不会被调用,host activity中获取到的requestCode是准确的:

MainActivity: on activity result start to deal with: 13

MainActivity: on activity result end

MainActivity: on resume start

FirstFragment: on resume start

 

refer onActivityResult not being called in Fragment

 

这样的问题也需要在androidannotations中引起注意,

ProcessActivity_.intent(this).startForResult(12)

这边intent中用this,还是getActivity(),onActivityResult的响应是不一样的

 

 

 

 

 

分享到:
评论

相关推荐

    轮子哥安卓开发框架,非常好用

    对小屏手机、全面屏手机、带虚拟按键手机进行了适配和优化,确保每一个界面细节都能处理到位、每一个功能细节都能符合大众的需求、乃至每一行代码都能贴合 Android 程序员的审美观。 优秀的代码设计:Android...

    android 本地上传和拍照上传demo

    最后,关于“NativeTakePhoto”,这可能是项目中的一个类或者模块,可能负责处理拍照过程中的细节,如创建临时文件、权限检查、图片的压缩等。在实际应用中,我们需要确保用户具有存储和相机访问权限,并处理可能...

    Android选图裁剪实现

    在Android开发中,选择图片...当然,实际开发中可能需要考虑更多细节,如图片旋转、权限管理、自定义裁剪比例等。通过理解和运用这些知识点,你可以构建一个完整的图片选择和裁剪功能,为用户提供便捷的图片编辑体验。

    Android调用系统相机和相册并裁剪图片

    在实际开发中,还需要考虑权限管理(如请求存储权限)、图片压缩、异步处理等细节问题,以确保功能的完整性和用户体验。同时,由于Android版本的差异,可能需要适配不同API级别的设备,确保兼容性。

    安卓系统相机,相册获取图片并显示

    当然,实际开发中可能需要处理更多细节,如权限管理(对于Android 6.0及以上版本,需要在运行时请求存储和相机权限),图片的压缩处理(因为原始图片可能会很大),以及适配不同的设备和Android版本。 在提供的`...

    Android开发之针对联系人的封装

    开发者只需要在调用`getContacts`后重写`onActivityResult`,然后在其中调用`ContactFactory`的`onActivityResult`方法,传入一个回调接口(如`ContactCallback`),这样就能在成功或失败时得到相应的回调。...

    Android源码——调用系统相册和系统照相机功能雨实例源码.zip

    在Android开发中,调用系统相册和相机是常见的功能需求。...实例源码中应该包含了这些细节,可以作为学习和参考的资源。通过对这些源码的分析和理解,开发者能够更好地掌握Android应用中与媒体相关的功能开发。

    Android源码——调用系统相册和系统照相机功能雨实例源码.7z

    值得注意的是,由于Android版本的差异和权限管理,实际应用中可能需要处理更多细节,例如检查读写权限(对于Android 6.0及以上版本),以及处理不同设备可能返回的不同的图片URI格式。 此外,压缩包中的1_...

    Android 调用系统相册和系统照相机功能雨实例源码.zip

    需要注意的是,为了兼容不同版本的Android系统,可能需要处理一些额外的细节,如权限请求(自Android 6.0 Marshmallow开始,运行时权限成为必需)。此外,随着Android版本的更新,某些API可能会发生变化,因此建议...

    直接调用系统摄像头的一个拍照demo

    提到的AndroidannotationTest可能涉及到Android Annotation库,这是一个简化Android开发的工具,它可以自动处理一些常见的编程任务,如注入、事件处理和生命周期管理。例如,@EActivity注解可以自动处理Activity的...

    androidの调用系统相机拍照

    在Android应用开发中,调用系统相机拍照是一个常见的功能需求,尤其对于社交、影像记录类的应用...在实际开发中,你可能还需要考虑图片的质量、分辨率、旋转问题、兼容性等更多细节,确保应用在不同设备上的表现一致。

    android调用相机,相册显示头像

    你可以解压后参考代码实现细节,以便更好地理解如何在实际项目中应用这些功能。 总的来说,Android调用相机和相册显示头像涉及到了Intent的使用、图片的获取与显示以及Android权限管理。理解并掌握这些知识点对于...

    android resoult简单demo

    在Android开发中,`Intent`是应用程序之间进行通信的重要机制,它可以用来启动活动(Activity)、服务(Service)等。...在YQY_Resoult这个示例项目中,你将找到更具体的实现细节,帮助你更好地理解和应用这些概念。

    Android拍照、剪裁

    在Android应用开发中,"拍照"和"剪裁"是两个常见的...注意,为了提供更好的用户体验,还要考虑一些细节,如图片质量设置、权限处理、裁剪样式定制等。同时,考虑到隐私和安全,记得在不需要时释放资源并删除临时文件。

    Android相机、图册demo

    在实际开发中,我们还需要考虑其他细节,比如权限管理(需要申请读写存储权限),图片的压缩处理(避免占用过多内存),以及异常处理等。此外,对于Android 6.0及以上版本,需要动态请求权限。 总的来说,Android...

    Android打开相册拍照获取照片路径等

    在Android开发中,用户经常需要通过应用访问手机的相册来选择或拍摄照片。这个过程涉及到几个关键步骤,包括请求相机...在实际开发中,还需要注意用户隐私、权限管理以及图片质量等其他细节,以提供更好的用户体验。

    android微博分享

    除了上述基本流程,还需要关注一些细节问题,如权限管理、用户体验优化、错误处理等。在实际开发中,可能还会遇到不同版本微博SDK的兼容性问题,以及微博平台政策的变化,因此需要持续关注官方文档和更新。 在提供...

    android图片上传服务器

    实际开发中,还需要考虑异常处理、进度显示、网络状态检测等细节。对于服务端,需要设置接收图片的接口,处理上传的请求,通常会涉及文件存储、权限验证和格式检查等。服务端的具体实现则根据所选用的技术栈(如Java...

    Android 中拍照、相册选择、裁剪照片代码(兼容Android7.0)

    在实际开发中,还需要考虑到异常处理、图片质量控制、文件保存和权限管理等细节问题。对于Android 7.0及以上版本,注意适配文件访问权限和存储权限的新特性。同时,对于不同设备的兼容性问题,可能需要对代码进行...

    Android 图片选择,只需一步实现

    在实际项目中,你可能还需要处理更多细节,例如裁剪图片、预览图片、支持多选等。对于更复杂的需求,可以考虑使用第三方库,如`Glide`或`Picasso`来处理图片加载,以及` Auswahl `或`PickerFragment`作为图片选择...

Global site tag (gtag.js) - Google Analytics