在我的應用程序中,我使用BrowserField顯示網站。當網站內的每個鏈接被選中時,我需要顯示加載屏幕,以便用戶不會感到空白。在Browserfield Blackberry中的handleNavigationRequest中加載屏幕
我能加入這個方法
public void documentCreated(BrowserField browserField,
ScriptEngine scriptEngine, Document document)
內加載屏幕但問題是,只有在建立連接時,該方法將被調用,所以顯示的加載屏幕之前會有一個延遲。
所以,我想實現ProtocolController並添加加載屏幕這個方法裏面
public void handleNavigationRequest(BrowserFieldRequest request)
但儘管如此,一個小的延遲後,將顯示加載屏幕(同時,它是下documentCreated法)
這是我的代碼片段
public void handleNavigationRequest(BrowserFieldRequest request)
throws Exception {
if (!NetworkUtil.isNetworkAvailable()) {
Dialog.inform(Strings.NETWORK_ERROR);
} else {
UiApplication.getUiApplication().invokeAndWait(new Runnable() {
public void run() {
BaseScreen.showLoadingProgress(Strings.LOADING);
}
});
InputConnection ic = handleResourceRequest(request);
browserField.displayContent(ic, request.getURL());
}
}
這個我試過的線程之外還有....還是同樣正在發生的事情。爲了測試,我在該方法中添加了一個對話框,並且在點擊該網站內的任何鏈接的同時,這個對話框就會出現。只有這個加載屏幕需要時間加載。
有什麼辦法可以做到這一點嗎?
另外,與原生瀏覽器相比,瀏覽器字段需要更長的時間才能加載網站。
我在這裏錯過了什麼!請幫助
我已經按照您的建議嘗試了documentUnloading方法。但它沒有被觸發。下面給出的是代碼片段,你能查看我在這裏做錯了什麼...... !!
protected void onUiEngineAttached(boolean attached) {
if (attached) {
BaseScreen.showLoadingProgress(Strings.LOADING);
}
super.onUiEngineAttached(attached);
}
try {
listener = new BrowserFieldListener() {
// Page starts loading...
public void documentCreated(BrowserField browserField,
ScriptEngine scriptEngine, Document document)
{
// show the loading screen
//showLoadingProgress(Strings.LOADING);
}
public void documentError(BrowserField browserField,
Document document) {
hideLoadingProgress();
Dialog.inform(Strings.NETWORK_ERROR);
}
public void documentAborted(BrowserField browserField,
Document document) {
hideLoadingProgress();
Dialog.inform(Strings.NETWORK_ERROR);
}
public void documentUnloading(BrowserField browserField,
Document document) {
BaseScreen.showLoadingProgress(Strings.LOADING);
}
// Page loaded
public void documentLoaded(BrowserField browserField,
Document document) {
// the document has loaded, hide loading popup ...
BaseScreen.hideLoadingProgress();
}
};
} catch (Exception ex) {
Dialog.inform(Strings.NETWORK_ERROR);
}
browserField.addListener(listener);
// add the browser field to a ui manager or screen
add(browserField);
// request the content
browserField.requestContent(URL);
感謝彼得...!我已經嘗試過BrowserFieldListener中的documentCreated方法,並且在等待建立連接時顯示加載屏幕時出現延遲。將嘗試documentUnloading以及你建議。 我也在本文後面實現了緩存 http://supportforums.blackberry.com/t5/Java-Development/How-to-Implement-a-Web-Cache-for-Your-BrowserField2-Application/ta -p/817911 但是我仍然沒有在加載時獲得那麼多的性能提升。我希望這是你也提到的文章。 – Kris
我也試過documentUnloading。但是這個事件沒有被觸發。我已經更新我的問題以包含我用於此的代碼片段。你可以請檢查! – Kris
更新了該部分的問題。 – Kris