I am developing an application which utilizes a WebView to sign into a website, pull content from it, then notify the user when content is updated. I have gotten the WebView to get the content however I need to know how I can run the WebView as Service in order to get it to run in the background.
As I understand, WebViews must be manipulated from the UI thread which makes things a whole lot harder.
Any suggestions/workarounds as to how I can get the app to notify the user regardless of whether they have the app open or not?
While WebView
s need to be manipulated on a single thread it doesn't necessarily need to be the UI thread (unless you want to attach the WebView
to the view hierarchy), however it needs to be the same thread for all of the WebView
s.
While it's not something explicitly supported (or heavily tested) there is nothing special that the WebView
does to prevent you from running it in a Service
.
For example:
public class WebViewService extends Service {
protected WebView mWebView;
@Override
public void onCreate() {
super.onCreate();
mWebView = new WebView(getApplicationContext());
}
// ...
}
The WebView
does call a couple of methods on the Context
that don't normally work in a Service
(like getTheme()
), so you'd have to work around that with a ContextWrapper
.
You'll also need to manually call WebView.layout
to trick the WebView into thinking it has a size:
int width = 1080;
int height = 1920;
mWebView.layout(0, 0, width, height);
There might be more stuff you'd need to do, but nothing else comes to mind.