Xamarin Android应用重启问题:部分设备切后台后重启
这种情况我之前做项目时也碰到过,既然已经排除了「不保留活动」的影响,那可以从这几个方向逐一排查:
检查设备内存回收机制
部分中低端设备的系统内存管理会比较激进,当后台应用占用内存偏高时,系统会主动回收进程。你可以通过adb shell dumpsys meminfo 你的应用包名查看内存占用详情,针对性优化内存使用——比如及时释放Bitmap资源、避免匿名内部类导致的内存泄漏;必要时也可以在Manifest里给应用添加android:largeHeap="true"配置(注意别滥用,仅在内存确实吃紧时使用)。校验Activity状态保存逻辑
看看主Activity的onSaveInstanceState和onRestoreInstanceState方法是否正确处理了页面状态。如果这部分逻辑有漏洞,系统恢复应用时无法重建原有页面状态,就会看起来像是应用重启。要确保所有需要保留的页面数据都在onSaveInstanceState中存入Bundle,再在onRestoreInstanceState或onCreate方法里完成恢复。排查厂商后台限制策略
小米、华为、vivo这类厂商有自己的后台管理规则,哪怕关闭了系统的「不保留活动」,厂商的电池优化、后台清理策略依然可能杀死应用。你可以引导用户在设备的「电池优化」「后台应用管理」里,把你的应用设置为「允许后台运行」或「无限制」权限。抓取进程被杀的日志
用adb logcat抓取应用重启前后的日志,搜索Process 你的包名 has died或者Low Memory Killer相关内容,定位是系统内存不足导致回收,还是应用自身崩溃(比如未捕获的异常)。如果是崩溃,根据日志里的异常信息修复对应代码即可。检查第三方框架的异常处理逻辑
有些Crash上报框架或自定义的异常拦截逻辑,会在应用出现异常时主动触发进程重启,这也会造成「重启」的假象。排查这类框架的配置,确认是否存在自动重启的规则。
内容的提问来源于stack exchange,提问作者袧懈泻芯谢邪泄 袦邪褉褌褘薪褞泻

