Webview在被用户杀死之后不会恢复状态

M.A*_*ida 5 java android android-webview

几天来我一直遇到麻烦,无法理解这个问题.基本上我有一个Webview加载网站,第一页是登录,登录后跟随内容.

每个用户验证都是通过它自己的站点进行的.因此,没有什么可以保存在SharedPreference例如.我只在这种情况下使用网址.

所以onCreate在杀死我的应用程序后,webview没有在它被杀死之前恢复之前的状态.

我想它是因为savedinstancestate变为null,并且在应用被杀之后再次加载url.

我有会话cookie和其他东西.

我想知道是否有人有一些建议.

ps我是Android的新手.

e4c*_*4c5 5

正如您自己指出的那样,因为保存的状态为null,您不可能期望onCreate将您的webview恢复到打开的最后一页.您需要做两件事:

确保您的第一页登录页面在检测到用户已经登录时重定向到相关内容页面.由于您已经在使用cookie,因此这是微不足道的.

然后骑过onPause方法来保存webView的当前url.

@Override
protected void onPause() {
    super.onPause();
    SharedPreferences prefs = context.getApplicationContext().
            getSharedPreferences(context.getPackageName(), Activity.MODE_PRIVATE);
    Editor edit = prefs.edit();
    edit.put("lastUrl",webView.getUrl());
    edit.commit();   // can use edit.apply() but in this case commit is better
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在onCreate方法上读取此属性并根据需要加载URL.如果定义了首选项,则加载它,如果没有加载登录页面(如果已经登录则应该重定向到第一个内容页面)

更新 这里是你的onResume可能是什么样子.还在上面的onPause()方法中添加了一行.

@Override
protected void onResume() {
    super.onResume();
    if(webView != null) {
        SharedPreferences prefs = context.getApplicationContext().
            getSharedPreferences(context.getPackageName(), Activity.MODE_PRIVATE);
        String s = prefs.getString("lastUrl","");
        if(!s.equals("")) {
             webView.loadUrl(s);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)