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

时间:2015-09-28 22:33:07

标签: java android android-webview

我已经有几天遇到麻烦了解这个问题。基本上我有一个Webview加载一个网站,第一页是登录,登录后跟随内容。

每个用户验证都是通过自己的网站进行的。因此,例如SharedPreference中没有任何内容可以保存。我只在这种情况下使用网址。

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

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

我有会话cookie和其他东西。

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

。我是Android的新手。

1 个答案:

答案 0 :(得分: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
}

然后你可以在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);
        }
    }
}