Android程序一个因requestPermission导致不停onResume(不停打印Timeline: Activity_launch_request time)的问题

本文介绍了在Android开发中遇到的一个问题,即按钮无法点击,原因是onResume方法中无条件请求权限导致的无限循环。当权限请求弹框快速关闭时,会导致页面卡顿。解决方案包括在请求权限前检查是否已拥有权限,以及在首页onCreate中一次性申请权限。通过改进,可以避免页面卡顿,提高用户体验。

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

 Android问题新增 

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

 override fun onResume() {
        super.onResume()

        ActivityCompat.requestPermissions(this, mutableListOf(Manifest.permission.READ_PHONE_STATE
                ,Manifest.permission.READ_CONTACTS,Manifest.permission.READ_CALL_LOG
                ,Manifest.permission.WRITE_CONTACTS,Manifest.permission.CALL_PHONE
                ,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE).toTypedArray(), 1);

    }

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

改进方法为:

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

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

方法一为推进方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值