Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

兼容性问题:在Android 9以及以下版本BaseFragment类中的onActivityResume方法不会执行 #146

Open
chengzhenwong opened this issue Nov 25, 2024 · 6 comments
Assignees
Labels
bug Something isn't working

Comments

@chengzhenwong
Copy link

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:v13.1

  • 问题描述【必填】:在Android 9以及以下版本BaseFragment类中的onActivityResume方法不会执行

  • 复现步骤【必填】:在Android 9以及以下版本,从Fragment跳转到一个Activity,再返回,不会执行BaseFragment类的onActivityResume方法,而是执行onFragmentResume方法

  • 是否必现【必填】:是

  • 出现问题的手机信息【必填】:Android 9以及以下版本设备

  • 出现问题的安卓版本【必填】:Android 9以及以下版本

请回答

  • 是部分机型还是所有机型都会出现【必答】:Android 9以及以下版本

  • AndroidProject 最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:是

  • 使用原生的权限 API 是否会出现该问题【必答】:是

其他

  • 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)

  • 提供截图或视频(根据需要提供,此项不强制)

image

  • 提供解决方案(如果已经解决了的话,此项不强制)
    *问题原因:在 Android 9 中,当 Fragment 的 onResume 方法被调用时,宿主 Activity 处于 "已恢复"(RESUMED)状态。从 Android 10 开始,当 Fragment 的 onResume 方法被调用时,宿主 Activity 可能处于 "已启动"(STARTED)状态,而不是 "已恢复"(RESUMED)状态。
@chengzhenwong chengzhenwong added the bug Something isn't working label Nov 25, 2024
@getActivity
Copy link
Owner

image image

@getActivity
Copy link
Owner

getActivity commented Nov 25, 2024

小伙子,我经过测试验证,并不能复现你说的这个问题,你看一下是不是搞错了?

@chengzhenwong
Copy link
Author

我调试的结果是在Android10的设备,切换首页tab时,mActivity.getLifecycle().currentState的值为RESUME,从其他Activity返回或从后台返回前台mActivity.getLifecycle().currentState的值为START,这种是正常现象;
但是在Android9的设备,切换首页tab时,mActivity.getLifecycle().currentState的值为RESUME,从其他Activity返回或从后台返回前台mActivity.getLifecycle().currentState的值也为RESUME,这种现象就有问题,不能正确执行onActivityResume方法

@chengzhenwong
Copy link
Author

image
这是解决测试提的bug,临时想的方法

@getActivity
Copy link
Owner

BaseFragment.kt.zip

@getActivity
Copy link
Owner

image

出现这个问题的原因是 Jetpack 中的 Lifecycle 组件对不同版本的处理不同,如果是高版本就会用 Activity 的方法去注册生命周期监听,否则就会使用一个透明的 Fragment 来获取 Activity 的生命周期监听,我的处理方案是,去掉在 Fragment 中的判断和回调 onActivityResume,改成使用 registerActivityLifecycleCallbacks 来监听 Activity 生命周期,具体改动的代码你可以参考上面的 zip 压缩包。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants