使用WebView时后台Service被关闭的原因排查
问题原因分析
- 进程优先级被WebView改变:Android 4的进程管理逻辑里,WebView加载网页后,应用进程会被系统判定为「可见进程」甚至「前台进程」——毕竟WebView在渲染网页,系统默认认为这个进程有用户可见的内容。之前没加WebView时,进程属于后台服务进程,手动清后台时系统可能只杀Activity,留着Service进程;但现在进程优先级变高,用户清后台时系统会直接终止整个进程,Service自然跟着死了。
- WebView绑定了进程生命周期:WebView加载网页会启动一堆关联组件,比如渲染线程、WebViewCore这些,它们和进程的绑定比普通Activity更紧密。当你清后台时,系统看到进程里有WebView相关的活跃资源,会直接判定这个进程没必要留,直接干掉整个进程,Service依赖这个进程,自然也没法重启。
- Android 4的Service重启规则限制:Android 4里Service能重启的前提是进程没被系统彻底干掉。如果进程是因为用户主动清后台(且进程被标记为可见进程)被终止的,系统不会触发
START_STICKY的重启逻辑——系统觉得这是用户主动要关的,不会再自动恢复Service。 - WebView未正确销毁的连锁反应:要是Activity销毁时没调用
webView.destroy()释放资源,系统会觉得进程里还有活跃的可见组件残留,清后台时直接杀进程。之前没WebView时,Activity销毁后进程只剩后台Service,系统允许它继续跑或者重启。
内容的提问来源于stack exchange,提问作者user22161552
相关产品推荐
相关产品推荐

