流程图如下:
(资料图)
MainActivity微信公号zu MainActivity2微信公号zu MainActivity3 MainActivity3微信公号zu Einstellungen,
收回权限返回运行日志如下//一路跳转,打开设置,收回权限。
com.miss.soullink E/MainActivity:==onCreate==25149
com.miss.soullink E/MainActivity:==onCreate==savedInstanceState null
com.miss.soullink E/MainActivity2:==onCreate==25149
com.miss.soullink E/MainActivity3:==onCreate==25149
//返回时
com.miss.soullink E/MainActivity3:==onCreate==27596
com.miss.soullink E/MainActivity2:==onCreate==27596
com.miss.soullink E/MainActivity3:==onDestroy==MainActivity3
com.miss.soullink E/MainActivity:==onCreate==27596
com.miss.soullink E/MainActivity:==onCreate==savedInstanceState Bundle[{android:viewHierarchyState=Bundle[mParcelledData.dataSize=944], androidx.lifecycle.BundlableSavedStateRegistry.key=Bundle[{}], android:lastAutofillId=1073741823, android:fragments=android.app.FragmentManagerState@6d44964}]
com.miss.soullink E/MainActivity2:==onDestroy==MainActivity2
进程重启原因权限撤销后进程的id发生了变化,即正在运行的程序在权限撤销后会被强制重启,并记录响应的活动栈信息。
MainActivity2的onCreate方法在MainActivity3的onCreate方法之后调用。虽然保留了活动的顺序,但这是一个不安全的过程。
很多初始化工作或者信息传递都无法保证!
后来我明白了iOS的机制。正在运行的iOS进程被撤销后,会重启进程但不会自动返回关闭的页面,但Android会!
进程重启后的处理为了保证进程的安全性,在系统重启app进程后,我们决定再次重启进程,返回登录界面。也就是说,app在权限恢复后重新启动流程两次。
判断条件:由于系统关闭进程是非正常关闭,savedInstanceState不为空,因此判断为第二次重启进程。为了确保安全性,可以将现有权限与以前的权限进行比较,以增强代码的健壮性。
除了撤销权限,还有其他情况会导致流程非正常关闭,多一层判断,少一层领导~
本文[高级伪原创标题]到此分享完毕,希望对大家有所帮助。
关键词: