Java Android-WebView(保存捆绑包以避免在屏幕旋转时丢失数据)

Java Android-WebView(保存捆绑包以避免在屏幕旋转时丢失数据),java,android,rotation,android-mapview,bundle,Java,Android,Rotation,Android Mapview,Bundle,因此,我理解,当我旋转屏幕时,内容将恢复到原来的状态,因为活动是为新布局创建和销毁的 这对我来说是一个问题,因为我在WebView中显示的web应用程序会向用户显示唯一的信息,当用户将手机转向一侧时,数据会丢失。现在,我知道了我必须重写的两种方法,但我不完全确定我可以在onSaveInstanceState中放入什么来使用完全相同的数据重新生成完全相同的页面。我会尝试存储URL并使用它,但是页面使用随机特性,所以会有所不同 到目前为止,我只知道: @Override protected void

因此,我理解,当我旋转屏幕时,内容将恢复到原来的状态,因为活动是为新布局创建和销毁的

这对我来说是一个问题,因为我在WebView中显示的web应用程序会向用户显示唯一的信息,当用户将手机转向一侧时,数据会丢失。现在,我知道了我必须重写的两种方法,但我不完全确定我可以在onSaveInstanceState中放入什么来使用完全相同的数据重新生成完全相同的页面。我会尝试存储URL并使用它,但是页面使用随机特性,所以会有所不同

到目前为止,我只知道:

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

有没有想过如何实现这一点?

据我所知,您的问题在于web应用程序,而不是Android客户端实现。
如果存储URL还不够,您必须找到另一种方法将这些“随机数据”发送到主机应用程序,可能是通过cookie或javascript变量。

据我所知,您的问题在于web应用程序,而不是Android客户端实现。
如果存储URL还不够,您必须找到另一种方法将这些“随机数据”发送到主机应用程序,可能是通过cookie,或者javascript变量。

如果您只是通过修改清单中的条目,使活动在配置更改期间不重新启动,可能会更简单,如下所示:

    <activity android:name=".MyActivity"
        android:configChanges="orientation|keyboardHidden" />

当设备方向或任何其他配置更改时,将销毁并重新创建活动的标准行为。这将导致WebView重新加载当前页面。如果您不想这样做,您可以将活动设置为处理方向和键盘隐藏的更改,然后只需保留WebView即可。它会根据需要自动重新定位自身

更新

根据我们的经验,我们应该使用

    <activity android:name=".MyActivity"
        android:configChanges="orientation|screenSize" />


而不是蜂窝及以上版本的设备。请试一试:)

如果您只是通过将清单中的条目修改为类似于以下内容,使您的活动在配置更改期间不重新启动,可能会更简单:

    <activity android:name=".MyActivity"
        android:configChanges="orientation|keyboardHidden" />

当设备方向或任何其他配置更改时,将销毁并重新创建活动的标准行为。这将导致WebView重新加载当前页面。如果您不想这样做,您可以将活动设置为处理方向和键盘隐藏的更改,然后只需保留WebView即可。它会根据需要自动重新定位自身

更新

根据我们的经验,我们应该使用

    <activity android:name=".MyActivity"
        android:configChanges="orientation|screenSize" />

而不是蜂窝及以上版本的设备。请试一试:)

和我一起试试这项工作

    if (savedInstanceState == null)
{
  web.loadUrl(webURL);
}
叠加法

@Override
protected void onSaveInstanceState(Bundle outState )
{
super.onSaveInstanceState(outState);
web.saveState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onSaveInstanceState(savedInstanceState);
web.restoreState(savedInstanceState);
}
链接:

与我一起尝试这项工作

    if (savedInstanceState == null)
{
  web.loadUrl(webURL);
}
叠加法

@Override
protected void onSaveInstanceState(Bundle outState )
{
super.onSaveInstanceState(outState);
web.saveState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onSaveInstanceState(savedInstanceState);
web.restoreState(savedInstanceState);
}

链接:

添加对
Log.d的调用(“Tim”,“onCreate调用”)configChanges
设置应该防止再次调用
onCreate()
。我用蜂窝+设备的附加信息更新了我的答案configChanges
设置应该防止再次调用
onCreate()
。我用蜂窝+设备的附加信息更新了我的答案。