当前位置:   article > 正文

Android程序一个因requestPermission导致不停onResume(不停打印Timeline: Activity_launch_request time)的问题_华为手机onresume()方法中调用 requestpermissions,无限循环

华为手机onresume()方法中调用 requestpermissions,无限循环

自己写的一个Android测试程序,在真机上面调试的时候,发现按钮有时候无法点击,通过日志发现点击事件确实没有触发,而不是点击处理逻辑卡顿;再多次调试,发现系统在不停地打印Timeline: Timeline: Activity_launch_request time。通过搜索,根据文章

 Android问题新增 

分析为onResume不停调用导致。添加日志发现确实在不停触发onResume。分析onResume中代码如下:

  1. override fun onResume() {
  2. super.onResume()
  3. ActivityCompat.requestPermissions(this, mutableListOf(Manifest.permission.READ_PHONE_STATE
  4. ,Manifest.permission.READ_CONTACTS,Manifest.permission.READ_CALL_LOG
  5. ,Manifest.permission.WRITE_CONTACTS,Manifest.permission.CALL_PHONE
  6. ,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE).toTypedArray(), 1);
  7. }

即在onResume中请求权限。问题即在该处:由于没有判断是否已经获取到权限,而直接请求权限,系统会吊起权限询问对话框,页面onPause,对话框中会检测是否用于所有申请的权限,如果有那么直接关闭(时间很快,用户无法感知这个对话框),页面onResume,然后死循环重复执行申请权限,导致整个页面卡顿。

改进方法为:

一、申请权限时,先检测是否用于该权限,没有再申请;

二、如果这个页面是首页,可以在onCreate中直接申请权限,只会执行一次。

方法一为推进方法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/285139
推荐阅读
相关标签
  

闽ICP备14008679号