我使用webview在几步之后(登录,点击链接,运行javascript等)从html中检索一些数据,如下所述:how to get html content from a webview?将更多动作放入级联中。 我不使用线程,主要是当一个动作(例如登录)完成时,它被称为 onPageFinished ,这会激发另一个 webview.loadUrl ,依此类推另一个 onPageFinished ,直到执行完所有操作。
我想创建一个显示此结果的窗口小部件,在按下窗口小部件刷新按钮或每天早上12点时触发 webview.loadUrl 链。只有在完成所有链之后,才能在小部件中显示结果。
我已经阅读了一些教程,我看到有不同的方法,TimerTask,服务,广播接收器等,但我不明白哪个适合我的项目。 我不知道我的解释是否清楚,但在小部件的onUpdate中,我应该启动 webview.loadUrl 序列,但在最后 onPageFinished <之前我无法返回任何内容/ strong>被称为。
这就是我对链动作的意思,urlChain是一个静态字符串LinkedList,带有URL序列(和其他东西)。
@SuppressLint("SetJavaScriptEnabled")
private void callChain()
{
/* WebViewClient must be set BEFORE calling loadUrl! */
browser.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url)
{
/* This call inject JavaScript into the page which just finished loading. */
if (!urlChain.isEmpty())
{
callChain();
}
}
});
/* load a web page */
if (!urlChain.isEmpty())
{
String currentUrl;
currentUrl = urlChain.pop();
browser.loadUrl(currentUrl);
}
}
答案 0 :(得分:0)
在Service
或其他一些独立结构fireing an update to the widget或performing an direct update on all widgets之后执行后台工作可能是一个好主意,然后会导致显示新数据。
在不了解您的确切项目的情况下,最干净的方式可能是SyncAdapter
,在后台执行同步并更新ContentProvider
,然后在更新小部件时可以使用它。
然而,根据您的实际需要,这可能是过度的(您需要在系统中注册同步帐户等)。您也可以让Service
窗口小部件可以请求更新,然后在完成加载后使用相同的技术触发更新。
哦,如果你必须在凌晨12点结束,请看AlarmManager
。