当前位置: 首页 > 面试题库 >

Webview在被用户杀死后无法恢复状态

霍弘厚
2023-03-14
问题内容

我已经困扰了几天以了解这个问题。基本上我有一个Webview加载网站的网站,第一页是登录名,登录后显示内容。

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

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

我想这是因为saveinstancestate变为null,并且在应用被终止后再次加载了url。

我有会话cookie和其他内容。

我想知道是否有人提出建议。

ps我是Android的新手。


问题答案:

正如您自己指出的那样,由于保存状态为null,因此您可能无法期望onCreate将您的Web视图返回到打开的最后一页。您需要做两件事:

确保登录页面(这是您的第一页)在检测到用户已经登录时重定向到相关内容页面。由于您已经在使用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。如果定义了首选项,则加载它,如果不加载,则登录页面(如果已经登录,则应重定向到第一个内容页面)

UPDATE 这就是您的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);
        }
    }
}


 类似资料:
  • 在创建时保护无效(捆绑保存的InstanceState){ 我无法在我的主要活动中使用此代码。我有一个正在工作的应用程序,它对webview的主要活动调用和应用程序继续在webview中工作。现在,我想使用windowmanager将登录屏幕设置为最顶层。请帮助我,你有任何样本代码。我想对系统进行最小的更改。

  • 问题内容: 我从python脚本生成了5个不同的进程,如下所示: 我的问题是,当父进程(主脚本)以某种方式被杀死时,子进程继续运行。 当父进程被杀死时,有没有办法杀死这样生成的子进程? 编辑:我正在尝试: 但这似乎不起作用 问题答案: 我自己也遇到了同样的问题,我有以下解决方案: 打电话之前,您可以设置。然后如此处所述python.org multiprocessing 进程退出时,它将尝试终止其

  • 问题内容: 我遇到了一个问题,我试图为我的Laravel 4项目安装一个新软件包。但是当我跑步时我得到了: 我在Internet上寻找问题,发现内存是问题,我认为我没有足够的RAM,我检查了一下我有411mb的空闲空间。作曲家真的需要更多RAM吗? 问题答案: “已杀死”消息通常表示您的进程消耗了太多内存,因此,如果可能,您可能只需要向系统中添加更多内存即可。在编写此答案时,我必须将虚拟机的内存增

  • 我们有一个带有三个代理(节点ID 0、1、2)的kafka集群和一个带有三个节点的zookeeper设置。

  • 问题内容: 我正在用C / C ++ 创建子进程。 当父进程结束(或由于某种原因被杀死)时,我也希望所有子进程也被杀死。 这是系统自动完成的吗?还是我必须自己做? 谢谢。 问题答案: 否。如果父进程被杀死,则子进程将成为init进程的子进程(该进程的进程ID为1,并由内核作为第一个用户进程启动)。 初始化过程会定期检查新的子代,然后等待它们(从而释放由其返回值分配的资源)。

  • 我正在研究以太网AVB模块。我的板可以被命令暂停 但是当从挂起恢复时,eth0不起作用。现象是: > 可平环回: $ ping 127.0.0.1 -- PHY电源关闭(关机) 无法ping邻居:$ping 192.168.1.1-- 我假设网络层(符合OSI模型)是可以的,因为我可以ping回环。我认为问题发生在物理层,与: > PHY ic(我的板使用Micrel Phys ksz9031)