在之前,我为关注
鸿蒙开发的初学者们讲解了关于高德地图关于位置权限的开通和测试,但发现自己在优化项目中的代码中也出现了一些小问题。比如在启动APP之后,首次进行权限的申请会导致APP的突然闪退,你不得不在手机桌面重新启动APP。
出现这些小问题,别看不起眼,在后面的功能持续完善时会影响我们开发的进度,前期需要进行更多时间梳理才行,后面的功能才能走的通。
一.为什么首次进行权限的选择,会导致APP突然闪退出手机界面? 出现这个现象,主要是由于我们自己还没有完全理解透“
权限的动态申请流程”。
鸿蒙系统中申请动态权限的流程,主要是分为3步:
第一步,在config.json文件中声明所需要的权限,这些配置基本上我们不会出错,配置也很简单。
config.json文件,权限配置
第二步,通过查询接口和授权弹窗来动态实现权限的申请,比如ohos.app.Context.verifySelfPermission接口和canRequestPermission接口进行查询,requestPermissionFromUser则可以显示首次授权的弹窗。
动态实现权限的申请
第三步,requestPermissionFromUser首次授权的弹窗需要有上下文给出反馈,而回调函数onRequestPermissionsFromUserResult可以进行接收。
接收申请权限的结果,并反馈结果
刚好,我测试的APP出现闪退,主要是出现在第三步,因为我在其条件判断语句中进行了MyAbilitySlice类的相关方法的调用。
调用AbilitySlice中的方法,会导致APP的闪退
其实,我加这个方法,主要是之前对功能需求在流程上产生了更严谨的想法,最终使APP在测试时出现闪退现象。实际上,我们根本没必要在第三步中调用AbilitySlice类的任何子方法,因为
onRequestPermissionsFromUserResult这个回调函数只是接收结果,第二步的查询接口才是整个权限申请流程的主线。
二.不通过回调函数去调用AbilitySlice类的任何方法,只因Intent做开头,AbilitySlice做导航。 如果我们都长期接触鸿蒙相关的项目,你会发现项目工程结构中AbilitySlice和Ability都有onStart这个方法,且这个方法还要进行穿值,且第一个传递数据的对象为
Intent。
onStart方法,穿值对象为Intel
我们再看下Intent这个类在官方Java API文档中的含义:
Intent类
从官方的API文档中,我们可以得知Intent这个类是系统的基本通信组件,只有此对象的正常启动,AbilitySlice中其它的子方法才能紧随其后才可运行。
一个Ability(或Page)可以拥有多个AbilitySlice
至于AbilitySlice这个类,它拥有完整的生命周期,且属于APP软件的前台,相当于前端,让一个Ability(或Page)可以拥有多个AbilitySlice,可让更多业务代码在AbilitySlice中进行。APP中的程序从启动到自动销毁,现在也是在更多的AbilitySlice中去实现,我们自己的Ability文件最好还是不要轻易去调用AbilitySlice中的任意方法,以免程序在流程上出现更多的错误。
结语: 希望
鸿蒙开发的初学者们在实际的开发过程中能够放慢编程开发的节奏,先搞清楚程序实现的具体思路,让开发和测试环节可以化繁为简。
毕竟,改Bug很耗精力和时间,不然会像我的APP在测试权限时会出现软件闪退的现象。其实,这也是考验我们对相关程序在实现原理上的理解,不要让程序流程的实现变得越来越复杂,以免继续给自己挖大坑。
花粉社群VIP加油站
恭喜你,领取到一张面值 0 元的优惠券
只有购买全集内容 0.00 元,才可抵扣使用。
有效期截止于:2020-12-12 23:59
是否立即使用?