Я работаю над проектом, где я загружаю из файла из Интернета, он невелик, всего несколько КБ.
Мой макет представляет собой список с меткой под ним. Когда пользователь обновляется (проверяет, доступен ли новый файл), я хочу заменить метку индикатором активности.
Я загружаю файл в отдельном потоке, чтобы не блокировать основной поток. Но у меня проблемы с индикатором активности. Я использую UiApplication.getUiApplication().invokeLater(//CODE);
, чтобы удалить метку из менеджера и добавить индикатор активности, а также запустить его. Это правильно? Я делаю это в потоке загрузки файлов, и правильно ли, что вам нужно вызывать код GUI из основного потока?
затем у меня есть блок кода (все это внутри метода run потока загрузки файлов), который загружает отчет, затем у меня есть новый метод invokeLater
, который удаляет индикатор активности и снова добавляет метку.
Однако это не работает должным образом, поскольку последний код invokeLater запускается перед первым. Я проверил с диалогами. Как я мог решить это?
Я хочу, чтобы он запускал код в том порядке, в котором я его кодировал, и ни один код не запускался до того, как другие закроются. Как я мог это сделать?
(и да, я знаю, что это грязно!)
private class UpdateReportThread extends Thread {
public void run() {
super.run();
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
view = new ActivityIndicatorView(Field.FIELD_HCENTER);
model = new ActivityIndicatorModel();
controller = new ActivityIndicatorController();
view.setController(controller);
view.setModel(model);
controller.setModel(model);
controller.setView(view);
model.setController(controller);
Bitmap bitmap = Bitmap.getBitmapResource("spinner.jpg");
view.createActivityImageField(bitmap, 5, Field.FIELD_HCENTER);
dialogManager = new VerticalFieldManager(Manager.FIELD_HCENTER | Manager.FIELD_VCENTER | Manager.USE_ALL_HEIGHT);
dialogManager.add(new LabelField("Please wait...", Field.FIELD_HCENTER));
dialogManager.add(view);
add(dialogManager);
view.getModel().resume();
delete(lblIssueWeek);
delete(lblIssueYear);
}
});
//File downloading code
//File downloading code
//File downloading code
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
view.getModel().cancel();
delete(dialogManager);
lblIssueWeek = new LabelField("", LabelField.FIELD_HCENTER);
lblIssueYear = new LabelField("", LabelField.FIELD_HCENTER);
add(lblIssueWeek);
add(lblIssueYear);
updateCurrentIssue();
}
});
}
}