首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用AsyncTask (Droid)弥补BetterAsyncTask的缺点

用AsyncTask (Droid)弥补BetterAsyncTask的缺点
EN

Stack Overflow用户
提问于 2011-12-07 17:08:30
回答 2查看 695关注 0票数 1

在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)的介绍之后,我不知道如何定义一个新的更好的异步任务(哪些方法保存了什么信息等等)。

因此,如果有谁可以为我(以及其他人)提供一些有用的源代码或教程,我将非常感激!

(如果您需要项目的jar文件,请告诉我,我可以给您发送一份副本)

编辑:

这里有一个很好的例子! 这里

好的,下面是我在源代码中找到的一些附加信息:

  1. 自动显示进度对话框。见useCustomDialog(),disableDialog()
  2. 如果从doInBackground内部抛出异常,则现在由handleError方法处理。
  3. 现在应该更长地重写onPreExecute()、doInBackground()和onPostExecute(),而应该分别使用onPostExecute()、doCheckedInBackground()和onPostExecute()。

让我们看看从这里我可以实现从then...still寻找一个工作的例子,尽管!

编辑2:

有几个例子可以找到这里这里。我坚持它,但我得到了一个错误。唯一的区别是,我的AsyncTask不是在活动中定义的,而是自己定义的一个类。通过遍历代码可以发现,错误发生在创建(AsyncTask内置)对话框时。

这是我的书签:

马上就来

EN

回答 2

Stack Overflow用户

发布于 2011-12-07 18:56:52

Droid现在有点过时了,主要是因为缺乏片段支持。但我将从我编写的一个应用程序中给出一个使用它的例子。

首先,活动类必须子类BetterActivity (或BetterXXXActivity)。在我的代码中,我使用的是ListActivity,所以这里我的子类是BetterListActivity。我还定义了一个BetterAsyncTask子类,以便扩展一些功能。

代码语言:javascript
复制
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.如果您想要捕获异常,可以抛出它)。

代码语言:javascript
复制
    protected Integer doCheckedInBackground(Context context, Void... params)
            throws Exception {
        mStuff = // some long-running code (no longer on the UI thread)
        return 1;
    }

最后,您至少需要对结果做一些事情,比如更新类变量或填充UI或其他东西。这是在after中完成的

代码语言:javascript
复制
    protected void after(Context context, Integer integer) {
        if (integer >= someAcceptablePositiveConstant) {
            mMainStuff = mStuff;
            doSomethingInTheUIWithMainStuff();
        } else {
            //gah!
        }
    }

正如您前面提到的,您可以对类做更多的工作,比如定义一个在任务之前在UI线程上工作的before()覆盖,或者使用failed() / handleError()来处理未检查/检查的故障。这只是一个简单的例子,希望能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2011-12-08 15:00:52

@ss真让人难受!错误很好地隐藏在BetterActivityHelper类中:

代码语言:javascript
复制
public static ProgressDialog createProgressDialog(final Activity activity,
        int progressDialogTitleId, int progressDialogMsgId) {
    ProgressDialog progressDialog = new ProgressDialog(activity);
    if (progressDialogTitleId <= 0) {
        progressDialogTitleId = activity.getResources().getIdentifier(
                PROGRESS_DIALOG_TITLE_RESOURCE, "string", activity.getPackageName());
    }
    progressDialog.setTitle(progressDialogTitleId);
    if (progressDialogMsgId <= 0) {
        progressDialogMsgId = activity.getResources().getIdentifier(
                PROGRESS_DIALOG_MESSAGE_RESOURCE, "string", activity.getPackageName());
    }
    progressDialog.setMessage(activity.getString(progressDialogMsgId));
    progressDialog.setIndeterminate(true);
    progressDialog.setOnKeyListener(new OnKeyListener() {
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
            activity.onKeyDown(keyCode, event);
            return false;
        }
    });

progressDialogTitleId和progressDialogMsgId期望res/ value /string.xml.xml中有一个值:

代码语言:javascript
复制
<!-- Droid-Fu Progressdialog -->
<string name="droidfu_progress_dialog_title">Some nasty dialog title</string>
<string name="droidfu_progress_dialog_message">Some funny message</string>

如果未定义它们,则将引发运行时异常。

不幸的是,如果最好的帮助类是无文档的,那么它们几乎是无用的。我花了几个小时才弄清楚出了什么问题。因此,NO再次向开发人员表示“谢谢”。沙尔

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8419434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档