Я разрабатываю приложение для Blackberry, которое использует сетевые возможности.Запрос выполняется нажатием кнопки со следующим кодом:
mainButton=new BitmapButton(Bitmap.getBitmapResource("elcomercio.gif"), Bitmap.getBitmapResource("elcomercio.gif"), Field.FOCUSABLE){
protected boolean navigationClick(int status,int time) {
//It automatically add itself to the screen stack
waitScreen=new WaitScreen();
TimeOutThread timeOut=new TimeOutThread(HomeScreen.this, 10000);
HttpHelper helper=new HttpHelper("http://www.elcomercio.com/rss/latest", null, HomeScreen.this, HttpHelper.GET);
UiApplication.getUiApplication().invokeLater(timeOut);
UiApplication.getUiApplication().invokeLater(helper);
return true;
}
};
Как вы можете видеть, TimeOutThread и HttpHelper оба наследуются от Thread, так что они могут быть вызваны вне основного потока выполнения.Также они оба получают текущий экран в качестве объекта делегата, чтобы я мог выполнять методы позже на экране.в этом случае тайм-аут выполняет следующую функцию:
public void onTimeout() {
if(!didTimeout.booleanValue()){
UiApplication.getUiApplication().popScreen(waitScreen);
didTimeout=Boolean.TRUE;
}
}
Метод тайм-аута успешно вызывается ... даже окно waitScreen успешно выводится, и отображается последний экран.Но пользовательский интерфейс в этот момент зависает ... это похоже на то, что HttpThread, который у меня был, все еще выполняет блокирование пользовательского интерфейса ... Я знаю это, потому что, когда сетевой поток истекает ... пользовательский интерфейс снова реагирует.Что я делаю не так ??.