Запуск WebView в фоновом режиме

Я разрабатываю приложение, которое использует WebView для входа на веб-сайт, вытаскивает контент из него, а затем уведомляет пользователя, когда контент обновляется. Я получил WebView, чтобы получить контент, однако мне нужно знать, как я могу запустить WebView как сервис, чтобы заставить его работать в фоновом режиме.

Как я понимаю, WebViews необходимо манипулировать из потока пользовательского интерфейса, что делает вещи намного сложнее.

предложения/обходные пути, как я могу получить приложение, чтобы уведомить пользователя независимо от того, есть ли у них приложение открыто или нет?

3 ответов


в то время как WebViews нужно манипулировать в одном потоке, он не обязательно должен быть потоком пользовательского интерфейса (если вы не хотите присоединить WebView к иерархии представлений), однако он должен быть одним и тем же потоком для всех WebViews.

хотя это не что-то явно поддерживаемое (или сильно протестированное), нет ничего особенного, что WebView делает, чтобы предотвратить его запуск в Службе. WebView вызывает несколько методов в контексте, которые обычно не работают в Службе (например, getTheme ()), поэтому вам придется обойти это с помощью ContextWrapper. Вам также необходимо вручную вызвать WebView.layout чтобы обмануть WebView, думая, что у него есть размер. Может быть, вам нужно сделать больше вещей, но больше ничего не приходит на ум.


Вы имеете в виду что?

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

вы не можете надуть или изменить любой вид из фонового потока. Но если вам нужно содержимое веб-страницы, вы можете получить его в фоновом потоке с помощью HTTP GET. Вам нужно использовать GET on the url, чтобы получить его HTML-данные.