2010-08-26 35 views
5

Tôi tự hỏi cách webview tải một URL cụ thể. Liệu nó có tạo ra một chuỗi mới hay tải URL trong cùng một luồng, tức là chuỗi giao diện người dùng không? Lý do tôi hỏi đây là tôi đang đối mặt với một số vấn đề về khóa wakeup lạ khi tôi khởi chạy Activity từ Activity hiện tại (trong phương thức onCreate Activity) hiện tại, tạo ra một WebView trong phương thức onCreate và tải một URL bằng phương thức loadUrl. Vì vậy, khi tôi thực hiện xong hoạt động này và quay trở lại Hoạt động khởi chạy này, khởi động lại vì thời gian khóa đánh thức đã hết hạn.
Tôi googled nó và phát hiện ra rằng nếu onCreate phương pháp của một hoạt động mất quá lâu sau đó loại vấn đề có thể xảy ra. Bạn có gặp phải vấn đề nào liên quan đến một WebView không? Đánh giá cao mọi sự giúp đỡ.
Đây là mã mẫu. Phương thức loadUrl của WebView có chạy trên chuỗi giao diện người dùng không?

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

Xin chào, tôi đã sử dụng WebViews (và loadUrl) trong onCreate và không bao giờ gặp phải bất kỳ sự cố nào (thậm chí đã phân tích cú pháp XML trong cùng một onCreate). Bạn đang làm gì khác trong onCreate của mình? Bạn có đang khởi chạy hoạt động như một người ngang hàng hay là một hoạt động trẻ em không? –

+0

do đó startActivityForResult tạo một hoạt động con? nếu có thì tôi có khởi động một hoạt động của trẻ. – bhups

+0

Tôi đã thêm một chút mã mẫu. – bhups

Trả lời

3

Phương thức loadUrl trong WebView sử dụng cơ chế Trình xử lý tức là nó sẽ chạy trong chuỗi giao diện người dùng. Bạn nên dừng tải dữ liệu bằng cách gọi webView.stopLoading() khi hoạt động bị tạm dừng/dừng.

+0

Có thể đây là lý do tại sao đôi khi webview dường như làm hỏng ứng dụng của tôi mà không có thông báo lỗi, khi gọi hàm loadUrl từ một lớp khác? – NoBugs

+1

làm thế nào để u làm cho nó chạy trên một chủ đề khác nhau mười bởi vì khi bạn đặt nó bên trong chủ đề riêng của nó nó không nói rằng nó không thể chạy trên một chủ đề khác nhau – jonney

Các vấn đề liên quan