WebSettings s = webView.getSettings();
s.setJavaScriptEnabled(true);
s.setDomStorageEnabled(true);
s.setDatabaseEnabled(true);

WebView 每次重新加载后登录态就没了,localStorage.length 是 0,token 读出来 null,杀掉进程再开也一样,一天内掉线 6 次。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,WebView 默认没开 DOM Storage,localStorage 写在内存里,页面销毁就清空。宿主只调了 setJavaScriptEnabled,漏了 domStorageEnabled。

「WebView DOM Storage」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

处理上按这个顺序:打开 domStorageEnabled 和 databaseEnabled;确认没有在 onPageFinished 里清缓存或清数据;需要跨进程保留就用原生存储兜底;重载页面三次 看 localStorage 是否还在。

改完只确认一件事:连续重载三次页面 localStorage.length 不变,登录态保持到主动退出。

作者 9823189