【问题标题】:Webview is not restoring the state after it was killed by the userWebview 在被用户杀死后没有恢复状态
【发布时间】:2015-09-28 22:33:07
【问题描述】:

几天来,我一直难以理解这个问题。基本上我有一个Webview,它加载一个网站,第一页是登录,内容在登录后跟随。

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

杀死我的应用程序后创建,webview 不会恢复它被杀死之前的状态。

我想是因为保存的实例状态为空,并且在应用程序被杀死后再次加载 url。

我有会话 cookie 和其他东西。

我想知道是否有人有什么建议。

p.s.我是 Android 新手。

【问题讨论】:

    标签: java android android-webview


    【解决方案1】:

    正如您自己指出的那样,由于保存的状态为空,您不可能期望 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);
            }
        }
    }
    

    【讨论】:

    • 该代码有效,但每次您从另一个应用程序切换回 WebView 或杀死并再次打开它时,它也会重新加载 WebView。我怎样才能阻止它?
    • 不幸的是,这不支持后退导航,这意味着如果用户已经导航到A>B>C>D,在进程终止后只会保存D,因此在恢复后用户将无法导航到C>B>A
    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 2023-03-23
    • 2021-01-07
    • 1970-01-01
    • 2020-10-23
    相关资源
    最近更新 更多