Я работаю над WorkManager worker для приложения android. Одной из функций рабочего является создание веб-просмотра, загрузка URL-адреса "file: ///" и запуск некоторого javascript для извлечения данных из localstroage, indexDB и т.д. c.
Все отлично работает, пока основное приложение открыто или работает в фоновом режиме. Когда приложение закрывается, рабочий запускается, как ожидалось, но WebView не загружает URL-адрес последовательно. Из 4 попыток URL обычно загружается один раз. Во всех остальных случаях обратный вызов onPageFinished не срабатывает. Кто-нибудь видел это раньше? Мой код ниже:
createWorker ()
public static void createWorker() {
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
PeriodicWorkRequest notificationWork =
new PeriodicWorkRequest.Builder(NotificationHandler.class, 30, TimeUnit.SECONDS)
.setConstraints(constraints)
.build();
WorkManager.getInstance().enqueueUniquePeriodicWork("LC_NoteService", ExistingPeriodicWorkPolicy.REPLACE, notificationWork);
}
doWork ()
public Result doWork() {
Handler handler = new Handler(Looper.getMainLooper());
try
{
handler.post(
new Runnable()
{
@Override
public void run()
{
WebView myWebView = new WebView(getApplicationContext());
myWebView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url)
{
super.onPageFinished(view, url);
Log.d("TAG", "Inside onPageFinish");
myWebView.evaluateJavascript("javascript:(function() {\n" +
"SOME JAVASCRIPT HERE" +
"})();", new ValueCallback<String>() {
@Override public void onReceiveValue(String s) {
loopBack(); //function for checking data
}
});
}
@Override
public void onReceivedError(WebView view, int errCode, String desc, String failingURL)
{
Log.d("TAG", "WebView Error Code: " + errCode + " Description: " + desc + " URL: " + failingURL);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
public void loopBack()
{
//SOME LOGIC
}
});
Log.d("TAG", "About to Create Set Webview Settings");
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowContentAccess(true);
webSettings.setAllowFileAccess(true);
webSettings.setDomStorageEnabled(true);
webSettings.setDatabaseEnabled(true);
myWebView.getSettings().setDatabasePath("/data/data/" + myWebView.getContext().getPackageName() + "/databases/");
myWebView.loadUrl("file://");
}
}
);
} catch (Exception e)
{
e.printStackTrace();
}
return Result.success();
}
}