赞
踩
自己写的一个Android测试程序,在真机上面调试的时候,发现按钮有时候无法点击,通过日志发现点击事件确实没有触发,而不是点击处理逻辑卡顿;再多次调试,发现系统在不停地打印Timeline: Timeline: Activity_launch_request time。通过搜索,根据文章
分析为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中直接申请权限,只会执行一次。
方法一为推进方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。