Droid-fu сейчас немного устарел, в основном из-за отсутствия поддержки фрагментов.Но я приведу пример из приложения, которое я написал, которое использовало его.
Во-первых, ваш класс активности должен иметь подкласс BetterActivity (или BetterXXXActivity).В моем коде я использовал ListActivity, поэтому мои здесь подклассы BetterListActivity.Я также определяю подкласс BetterAsyncTask, чтобы можно было расширить некоторые функции.
public class DroidFuExample extends BetterListActivity {
private ExampleTask mTask;
private List<Stuff> mMainStuff;
private class ExampleTask extends BetterAsyncTask<Void, Void, Integer> {
private List<Stuff> mStuff;
private DroidFuExample mContext; // a context for lifecycle management
...
}
}
Теперь моей задаче не нужен параметр, используется неопределенный диалог, поэтому прогресс не публикуется, и требуется вернутьInteger.Ваши потребности могут различаться, и это влияет на типы, используемые в определении класса.
Следующий шаг - определить, что задача обрабатывает в фоновом режиме.В моем случае мне нужно заполнить mStuff.В своем классе задач определите либо doInBackground (), либо doCheckedInBackground () (doChecked ... может вызвать исключение, если вы хотите его перехватить).
protected Integer doCheckedInBackground(Context context, Void... params)
throws Exception {
mStuff = // some long-running code (no longer on the UI thread)
return 1;
}
Наконец, по крайней мере, вам нужно сделатьчто-то с вашим результатом, например, обновить переменную класса или заполнить пользовательский интерфейс или что-то.Это делается в after
:
protected void after(Context context, Integer integer) {
if (integer >= someAcceptablePositiveConstant) {
mMainStuff = mStuff;
doSomethingInTheUIWithMainStuff();
} else {
//gah!
}
}
Как вы уже упоминали, с классом можно сделать еще больше, например, определить переопределение before()
, которое работает в потоке пользовательского интерфейса перед задачей, или failed()
/ handleError()
для обработки непроверенных / проверенных сбоев.Это простой пример, надеюсь, он поможет.