我正在使用弹出屏幕显示后台上传过程的更新状态。我想取消之间的上传。我试图通过在弹出屏幕上添加一个按钮或设备的物理后门来实现这一点。但似乎所有生成的事件都没有被应用程序捕获。
以下是我如何创建弹出屏幕并将其显示为用户
DialogFieldManager manager = new DialogFieldManager();
//DialogFieldManager manager = (DialogFieldManager)getDelegate();
statusUpdate = new LabelField("Please Wait...");
manager.addCustomField(statusUpdate);
_gaugeField = new GaugeField("", 0, 100, 0, GaugeField.PERCENT);
manager.addCustomField(_gaugeField);
cncl_Btn = new ButtonField("Cancel",ButtonField.CONSUME_CLICK | ButtonField.FIELD_HCENTER | ButtonField.NEVER_DIRTY);
manager.addCustomField(cncl_Btn);
cancelFlag = 0;
cncl_Btn.setChangeListener(new FieldChangeListener()
{
public void fieldChanged(Field field, int context) {
// Auto-generated method stub
UiApplication.getUiApplication().invokeLater(new Runnable()
{
public void run()
{
cancelFlag = 1;
//onClose();//as this method exited from application
// close();//this method gave me IllegalStateException
}
});
}
});
//BackUpScreen.this.addMenuItem(_viewItem);
popup = new PopupScreen(manager);
UiApplication.getUiApplication().pushScreen(popup);
这一行我很快就会在这样的线程中调用实际的上传过程
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
//.... do other stuff I wanted done...
backUpThread = Thread.currentThread();
uploadItems();
}
});
但是,如果我按下弹出屏幕内的取消按钮,它没有响应。我通过在按钮的fieldchange监听器方法中添加断点来检查这一点。
我怎么能在黑莓手机上做到这一点?
答案 0 :(得分:2)
对invokeLater的调用(int代码的第二位)导致Runnable在事件线程上执行。如果您对事件线程块执行任何操作,则UI将在您描述时变得无响应。任何可能阻止的调用都不能在事件线程上运行。