在Google上进行了冗长且不成功的搜索后,事实证明,几乎没有任何有关名为Droid-Fu https://github.com/kaeppler/droid-fu的便捷库的信息。
在阅读了创建者(http://brainflush.wordpress.com/2009/11/16/introducing-droid-fu-for-android-betteractivity-betterservice-and-betterasynctask/)或API(http://kaeppler.github.com/droid-fu)的介绍之后,我不知道如何定义一个新的Betterasynctask(哪些方法可以保存哪些信息等)。
因此,如果有人可以为我(以及其他人)提供一些有用的源代码或教程,我将不胜感激!
(如果您需要该项目的jar文件,请告诉我,我可以将副本发送给您)
编辑:
A good example can be found here!和here
好的,这是我在源代码中找到的一些其他信息:
将自动显示一个进度对话框。请参见useCustomDialog(),disableDialog()
如果从doInBackground内部引发了异常,则现在可以通过handleError方法来处理此异常。
现在,您应该更长一些地重写onPreExecute(),doInBackground()和onPostExecute(),而应该分别使用before(),doCheckedInBackground()和after()。
让我们看看从那时起我可以实现的目标……虽然仍在寻找一个可行的示例!
编辑2:
可以在here和here中找到几个示例。我坚持下去,但出现错误。唯一的区别是我的AsyncTask不是在活动中定义的,而是自己的类。单步执行代码表明创建(AsyncTask内置)对话框时发生错误。
这是我的堆栈跟踪:
一分钟后
最佳答案
Droid-fu现在有点过时了,主要是由于缺少Fragment支持。但我将举一个我编写的使用它的应用程序为例。
首先,您的活动类必须将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;
}
最后,至少您需要对结果做一些事情,例如更新类变量或填充UI或其他内容。这是在
after
中完成的: protected void after(Context context, Integer integer) {
if (integer >= someAcceptablePositiveConstant) {
mMainStuff = mStuff;
doSomethingInTheUIWithMainStuff();
} else {
//gah!
}
}
正如您提到的,您可以使用该类做更多的事情,例如定义一个在任务之前在UI线程上起作用的
before()
覆盖,或定义failed()
/ handleError()
处理未检查/检查的失败。这只是一个简单的示例,希望对您有所帮助。关于android - 用BetterAsyncTask(Droid-Fu)补偿AsyncTask的缺点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8419434/