Xamarin Forms Android:如何阻止后台应用被Android系统回收?
Android应用降低系统内存回收概率的方案
首先明确:没有办法完全阻止Android系统回收后台应用,因为系统的内存管理机制是为了保障整个设备的运行流畅性,系统会优先回收占用资源多、优先级低的后台应用,这是系统级的限制,无法绕过。但可以通过以下手段大幅降低应用被回收的概率,同时优化回收后的恢复体验:
压缩应用内存占用
- 及时释放闲置资源:比如用完就关闭数据库连接、回收不再显示的Bitmap、终止无用的后台线程
- 用
LruCache管理内存缓存,避免缓存数据占用过多内存 - 简化页面布局层级,减少View树的内存消耗
提升应用优先级
- 前台服务:如果应用需要在后台持续处理必要任务(比如同步数据),可以启动前台服务。系统会给前台服务对应的应用更高的内存优先级,被回收的概率会大幅降低,但Android 8.0及以上版本要求前台服务必须在通知栏显示持续的通知
- 避免应用进入空闲状态:可以适当利用WorkManager处理后台任务,不过这主要是保证任务执行,对内存优先级提升有限
优化状态恢复体验
- 既然无法完全避免回收,就把恢复做得更无感:在
onSaveInstanceState方法中保存滚动位置、页面输入内容等关键状态,在onCreate或onRestoreInstanceState中恢复;复杂页面可以用ViewModel结合SavedStateHandle来管理状态,或者把核心数据存在本地数据库、SharedPreferences里,重启后直接读取
- 既然无法完全避免回收,就把恢复做得更无感:在
减少后台资源消耗
- 不要在后台启动不必要的服务、广播接收器,避免应用在后台持续占用资源,降低被系统判定为可回收对象的概率
内容的提问来源于stack exchange,提问作者Marc Fabregat
相关产品推荐
相关产品推荐

