У меня есть следующий псевдокод:Концепция относительно кодирования с большим количеством GUI обновлений в Android (Gui Обработчики)
MySteps(){
//Step A
if (conditionA) {
showwaitdialog(messageA); // shows wait dialog, so User knows app is running
longrunnerA; // long running task, like downloading from internet.
dismissdialog // closes the wait dialog.
}
//Step B
if (conditionB && stepAfinished) { //real if not elseif
showwaitdialog(messageB); // shows wait dialog
longrunnerB; // long running task, like downloading from internet.
dismissdialog
}
//Step C
if (conditionC && stepDfinished) { //real if not elseif
showwaitdialog(messageC); // shows wait dialog
longrunnerC; // long running task, like downloading from internet.
dismissdialog
}
if (!conditionA && !conditionB && !conditionC && allStepsfinished){
startStepD();
}
}
Теперь мне нравится реализовать эту логику в моей Android App: С моим знанием я бы закодировать его следующим образом (также вид pseodocode), что приводит к очень уродливый код:
HandlerA(){
dismissDialog();
if(ConditionB){
showwaitdialog(messageB); // shows wait dialog
new BackgroundTask {
longrunnerB; // long running task, like downloading from internet.
callHandlerB();
}
}
}
HandlerB(){
dismissDialog();
if(ConditionC){
showwaitdialog(messageC); // shows wait dialog
new BackgroundTask {
longrunnerC; // long running task, like downloading from internet.
callHandlerC();
}
}
}
HandlerC(){
dismissDialog();
if(!ConditionA && !ConditionB && !ConditionC){
new BackgroundTask {
startStepD();
}
}
}
MySteps(){ // not correct name, because it calls only step A. I cant see,that there is a lot other stuff triggered.
showwaitdialog(messageA); // shows wait dialog
new BackgroundTask(){
longrunnerA(); // long running task, like downloading from internet.
call HandlerA();
}
}
Этот код распространяется в разных местах, а метод «MySteps» имеет неправильное название, потому что это только делает Степа.
Как я могу кодировать это более компактным и чистым, поэтому у меня будет метод MySteps(), который концентрирует всю логику, и обновления графического интерфейса будут работать правильно?
* UPDATE *
Кодирование с обработчиками аналогично кодированию с GOTO отчетности. Каждый кодер знает, нам следует избегать операторов GOTO. Вот почему я ищу лучшую концепцию кодирования для реализации вышеприведенной логики.
Что означает 'longrunner' в Mysteps? (Метод?) –
Это долго работающая задача. Не имеет значения, что она делает концептуальной. Это просто задача, которая длится долго. Например, загружает данные из Интернета. –
В порядке, я думаю, что эта логика, похоже, обрабатывается с использованием AsyncTask. –