Работает ли метод WebView loadUrl в потоке пользовательского интерфейса? - PullRequest
5 голосов
/ 26 августа 2010

Мне интересно, как веб-просмотр загружает определенный URL. Создает ли он новый поток или загружает URL-адрес в тот же поток, т.е. поток пользовательского интерфейса? Причина, по которой я спрашиваю это, заключается в том, что я сталкиваюсь со странной проблемой блокировки пробуждения, когда я запускаю Activity из текущей Activity (в методе onCreate текущей Activity), которая создает WebView в своем методе 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
}</p>

<p>HelperX:</p>

<p>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
  }
}</p>

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

1 Ответ

3 голосов
/ 26 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...