我的安卓应用程序中有一个WebView,用于显示一些数据,我手工将这些数据建模为HTML (它不是显示真实的网页,而是给它一些HTML来显示)。
数据来自and服务,因此需要一些时间来加载。现在,当用户远离此活动并再次返回时,数据将从webservice重新加载并再次显示,因此用户必须等待加载数据。然而,10次中有9次(甚至更多)的数据将与上次相同,因此这只是浪费时间。因此,我现在尝试实现一些基本的缓存:
最后一步我有麻烦了。现在,我只是简单地给WebView一些HTML来处理:
builder.append("<html><head><link rel=\"stylesheet\" href=\"file:///android_asset/style.css\" type=\"text/css\">");
builder.append("</link>");
builder.append("</head><body>");
builder.append(getBody(data));
builder.append("</body></html>");
webContents.loadDataWithBaseURL("file:///android_asset/", builder.toString(), "text/html", "utf-8", null);我只是简单地用缓存的数据调用这段代码,然后(在接收到新数据之后)使用更新的数据调用这段代码。
结果是,WebView被完全重新加载;它跳回页面的顶部(大多数页面都很长,因此用户会向下滚动一点),更糟糕的是,它会在一小部分时间内变为空白,然后开始重新加载所有内容(特别是在需要显示的图像时)。
我想避免这种明显的数据更新。我很好,小变化突然弹出(就像中间的一段文字变得稍长,导致页面滚动一点),但完全滚动到顶部是非常烦人的,完全空白和必须重新加载所有东西是不能接受的。
在这里我能做些什么来避免这些问题吗?我可以“更新”WebView的HTML而不让它完全重新加载所有内容吗?谢谢!
发布于 2013-08-11 05:10:35
您将不得不使您的WebView表现得像一个webapp。每次调用loadDataWithURL时,都会像重新加载页面一样重新加载页面。
避免这种情况的一种方法是通过一个JavaScript桥与代码的Java端进行JavaScript接口。通过将数据从Java端传递到JavaScript函数,您可以更新WebView ui,而无需进行完全重新加载。
一旦您在WebView中获得数据,更新HTML将取决于您的视图的外观。
如果您搜索'JavaScript DOM更新‘和'Android桥’,有许多演示可用。
https://stackoverflow.com/questions/18166935
复制相似问题