Работает ли метод loadUrl WebView в потоке пользовательского интерфейса?


Мне интересно, как webview загружает определенный URL. Создает ли он новый поток или загружает URL-адрес в том же потоке, т. е. в потоке пользовательского интерфейса? Причина, по которой я спрашиваю об этом, заключается в том, что я сталкиваюсь с какой-то странной проблемой блокировки пробуждения, когда я запускаю действие из текущего действия (в методе onCreate текущего действия), который создает веб-представление в своем методе onCreate и загружает URL-адрес с помощью метода loadUrl. Поэтому, когда я закончу с этим действием и вернусь к действию, которое запустил, это будет перезапущено, потому что время блокировки пробуждения истекло.
я погуглил его и обнаружил, что если метод onCreate действия занимает слишком много времени, то этот тип проблемы может возникнуть. Сталкивался ли кто-нибудь из вас с подобной проблемой, связанной с WebView? Любая помощь была бы очень признательна.
Вот пример кода.

Activity A:
class ActivityA {
  onCreate(){
    initializeSomething();
    registerSomeEvents();
    startSomething();
  }
  onSomeListener(){
    if(someFlag) {
      startActivity(ActivityB);
      //this will pause the current activity i.e. ActivityA
    }
  }
}
Activity B:
class ActivityB(){
  onCreate() {
    if(someFlag){ //someFlag is coming in intent
     helper = createHelperX();
    } else {
     helper = createHelperY();
    }
    helper.pleaseHelp(); //this does the rest of thing using activity instance
}

HelperX:

Class HelperX(){ createHelper() { //setup layout views etc, no WebView here //and wait for user interaction //register some events } onSomeEvent(){ if(someOtherFlag) { startActivityForResult(ActivityB); //and pass some flag, now this flag will trigger HelperY } }

HelperY: class HelperY(){ createHelper() { //setup views etc , this contains a WebView and calls loadURL. } }

1 5

1 ответ:

Метод loadUrl в WebView использует механизм обработчика, т. е. он будет выполняться в потоке пользовательского интерфейса. Вы должны остановить загрузку данных, вызвав webView.stopLoading (), когда действие приостановлено / остановлено.