2010-08-26 25 views
5

Web görünümünün belirli bir URL'yi nasıl yüklediğini merak ediyorum. Yeni bir iş parçacığı mı oluşturuyor veya URL'yi aynı iş parçacığına, yani UI iş parçacığına mı yüklüyor? Bunu sormamın nedeni, onCreate yönteminde bir WebView yaratan ve loadUrl yöntemini kullanarak bir URL yükleyen mevcut Aktiviteden (şu andaki Activity'ın onCreate yöntemi) bir Etkinlik başlattığımda bazı garip uyandırma kilidi sorunuyla karşılaşıyorum. Bu aktiviteyle işim bittiğinde ve başlatılan Etkinlik'e geri döndüğümde, tekrar başlatma süresi sona erdi çünkü tekrar başlatıldı.
Ben googled ve bir Activity onCreate yöntemi çok uzun sürerse, bu tür bir sorun oluşabilir ortaya çıktı. Herhangi bir WebView içeren bu tür bir sorunla karşılaştınız mı? Her türlü yardım gerçekten takdir edilecektir.
İşte örnek kod. WebView'ün loadUrl yöntemi UI iş parçacığı üzerinde çalışıyor mu?

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. } }

+0

Merhaba, onCreate WebViews (ve loadUrl) kullandım ve herhangi bir sorunla karşılaşmadım (aynı onCreate içinde XML ayrıştırma bile yaptım). OnCreate’da başka neler yapıyorsunuz? Aktiviteyi akran olarak mı yoksa çocuk aktivitesi mi yapıyorsunuz? –

+0

böylece startActivityForResult bir çocuk etkinliği oluşturur? eğer yaparsa evet bir çocuk aktivitesi başlatıyorum. – bhups

+0

Biraz örnek kod ekledim. – bhups

cevap

3

WebView'teki loadUrl yöntemi Handler mekanizmasını kullanır, yani UI iş parçacığında çalışır. Etkinlik duraklatıldığında/durdurulduğunda webView.stopLoading() öğesini arayarak veri yüklemeyi durdurmalısınız.

+0

Bu yüzden webview bazen başka bir sınıftan loadUrl çağırırken, hata iletisiyle uygulamamı çökmesine neden olabilir mi? – NoBugs

+1

nasıl farklı bir iş parçacığı üzerinde çalışırsınız? Çünkü kendi iş parçacığı içine koyduğunuzda farklı bir iş parçacığı üzerinde çalışamaz söyleyerek başarısız olur – jonney

İlgili konular