在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:

可以在herehere中找到几个示例。我坚持下去,但出现错误。唯一的区别是我的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/

10-11 20:00