Java Android-WebView(保存捆绑包以避免在屏幕旋转时丢失数据)
因此,我理解,当我旋转屏幕时,内容将恢复到原来的状态,因为活动是为新布局创建和销毁的 这对我来说是一个问题,因为我在WebView中显示的web应用程序会向用户显示唯一的信息,当用户将手机转向一侧时,数据会丢失。现在,我知道了我必须重写的两种方法,但我不完全确定我可以在onSaveInstanceState中放入什么来使用完全相同的数据重新生成完全相同的页面。我会尝试存储URL并使用它,但是页面使用随机特性,所以会有所不同 到目前为止,我只知道:Java Android-WebView(保存捆绑包以避免在屏幕旋转时丢失数据),java,android,rotation,android-mapview,bundle,Java,Android,Rotation,Android Mapview,Bundle,因此,我理解,当我旋转屏幕时,内容将恢复到原来的状态,因为活动是为新布局创建和销毁的 这对我来说是一个问题,因为我在WebView中显示的web应用程序会向用户显示唯一的信息,当用户将手机转向一侧时,数据会丢失。现在,我知道了我必须重写的两种方法,但我不完全确定我可以在onSaveInstanceState中放入什么来使用完全相同的数据重新生成完全相同的页面。我会尝试存储URL并使用它,但是页面使用随机特性,所以会有所不同 到目前为止,我只知道: @Override protected void
@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调用”)在OnCreate()方法中,检查在旋转设备时是否正在调用它。它肯定被调用了!可能是我在onCreate中调用了loadUrl方法,因此它只是再次加载URL吗?不,清单中的configChanges
设置应该防止再次调用onCreate()
。我用蜂窝+设备的附加信息更新了我的答案在OnCreate()方法中,检查在旋转设备时是否正在调用它。它肯定被调用了!可能是我在onCreate中调用了loadUrl方法,因此它只是再次加载URL吗?不,清单中的configChanges
设置应该防止再次调用onCreate()
。我用蜂窝+设备的附加信息更新了我的答案。