Мое приложение содержит функцию, требующую времени для загрузки (разбора файлов). Эта функция вызывается в многопользовательском случае, то есть из нескольких состояний, запускаемых пользователем. Кроме того, он вызывается, когда вызывается onCreate.Использование задачи async для android в зависимости от последовательности задач
В простом слове, поток:
- пользователь нажмите/OnCreate вызвать
- Функции для разбора файла
- Опубликовать в окна
- Других постобработки
Я надеюсь, пользователь может нажать «Отмена», чтобы остановить разбор файлов.
Я попытался использовать asynctask. Я знаю, что могу включить функцию onPostExecute. Но я предполагаю, что onPostExecute предназначен только для диалога прогресса. Или мне нужно переместить много кодов (для разных случаев). Не хорошая идея.
Я не предполагаю, что пользователь должен что-либо делать во время разбора файлов.
Итак, что является лучшим способом сделать это? Несмотря на то, что я знаю, что это нехорошо, я думаю, что я должен занять поток пользовательского интерфейса.
Проще говоря, я хочу дождаться «разбора файлов», но я не хочу занимать поток пользовательского интерфейса, поэтому пользователь может нажать «Отменить».
обновление: Я пробовал. однако есть проблема: Я использую asynctask. Я позвонил:
mTask = new YourAsyncTask().execute();
YourAsyncTask.get(); // this force to wait for YourAsyncTask to return.
DoSomethingBaseOnAsyncTaskResult();
YourAsyncTask.get() удерживает поток пользовательского интерфейса. Таким образом, диалог загрузки отсутствует, и пользователь не может нажать «Отменить» в диалоговом окне. Кажется, я должен двигаться каждую строку после
mTask = new YourAsyncTask().execute();
в
OnPostExecute()
, которые я не предпочитаю, чтобы сделать это, потому что DoSomethingBaseOnAsyncTaskResult() может сильно отличаться в зависимости от результата возврата. или иначе, это становится делать все YourAsyncTask()
см обновление моего вопроса, спасибо большое! – manhon
Просьба уточнить ваше требование. –