Android 在后台运行WebView

Android 在后台运行WebView,android,android-webview,android-service,android-networking,Android,Android Webview,Android Service,Android Networking,我正在开发一个应用程序,它利用WebView登录到一个网站,从中提取内容,然后在内容更新时通知用户。我已经获得了WebView以获取内容,但是我需要知道如何将WebView作为服务运行,以便使其在后台运行 据我所知,Web视图必须从UI线程进行操作,这使得事情变得更加困难 关于如何让应用程序通知用户,无论用户是否打开应用程序,有什么建议/解决方法吗?你是说 runOnUiThread(new Runnable(){ public void run() {

我正在开发一个应用程序,它利用WebView登录到一个网站,从中提取内容,然后在内容更新时通知用户。我已经获得了WebView以获取内容,但是我需要知道如何将WebView作为服务运行,以便使其在后台运行

据我所知,Web视图必须从UI线程进行操作,这使得事情变得更加困难

关于如何让应用程序通知用户,无论用户是否打开应用程序,有什么建议/解决方法吗?

你是说

runOnUiThread(new Runnable(){
        public void run() {
            ... something 
        }
    });

您不能从背景线程膨胀或修改任何视图。但是,如果您想要网页的内容,您可以使用HTTPGET在后台线程中获取它。您需要在url上使用GET来获取其HTML数据。

当需要在单个线程上操作WebView时,它不一定是UI线程(除非您希望将WebView附加到视图层次结构),但是所有WebView都需要是同一个线程


虽然WebView没有明确支持(或经过严格测试),但它并没有阻止您在服务中运行它的特殊功能。WebView确实在上下文上调用了一些通常在服务中不起作用的方法(如getTheme()),因此您必须使用ContextWrapper来解决这个问题。您还需要手动调用
WebView.layout
,使WebView认为它有一个大小。您可能需要做更多的事情,但没有想到其他事情。

它将检查是否可以让WebView实例运行并通过编程控制它以加载页面,而不必在页面加载期间占用屏幕。然后,当你知道你有材料加载,我会想切换到它的显示在一瞬间。我将做一些测试,看看它是否可以在移动设备上完成。

看看HTML选择对话框是否出现崩溃。这似乎不再是真的-似乎一定是UI线程。当我尝试在另一个线程中创建WebView时,我得到:“java.lang.RuntimeException:java.lang.Throwable:警告:在线程'UtilityWebViewServiceThread'上调用了WebView方法。所有WebView方法都必须在UI线程上调用。WebView的未来版本可能不支持在其他线程上使用。”人工呼叫。我正在从intentservice创建webview,谢谢。必须是UI线程!好的,现在它必须是一个UI线程。没什么大不了的,我们仍然可以发布一个runnable到UI的线程,即使是从后台应用程序,所有的运行都很好。但是如何使用服务上下文创建WebView,而不创建活动或透明的零大小窗口(需要SYSTEM_ALERT_window权限,我希望避免…)一些Java或Kotlin代码的概要将不胜感激。。。