Android 用BetterAsyncTask(Droid Fu)弥补AsyncTask的缺点
在谷歌上搜索了很长一段时间并没有成功,结果发现几乎没有任何关于一个叫做Droid Fu的便捷图书馆的信息 在阅读了creator()或API()的介绍之后,我不知道如何定义一个新的betterasynctask(什么方法包含什么信息等等) 因此,如果有任何人能为我(以及其他人)提供一些有用的源代码或教程,我将不胜感激 (如果您需要项目的jar文件,请告诉我,我可以给您发送一份副本) 编辑: 和 好的,下面是我在源代码中找到的一些附加信息:Android 用BetterAsyncTask(Droid Fu)弥补AsyncTask的缺点,android,droid-fu,Android,Droid Fu,在谷歌上搜索了很长一段时间并没有成功,结果发现几乎没有任何关于一个叫做Droid Fu的便捷图书馆的信息 在阅读了creator()或API()的介绍之后,我不知道如何定义一个新的betterasynctask(什么方法包含什么信息等等) 因此,如果有任何人能为我(以及其他人)提供一些有用的源代码或教程,我将不胜感激 (如果您需要项目的jar文件,请告诉我,我可以给您发送一份副本) 编辑: 和 好的,下面是我在源代码中找到的一些附加信息: 将自动显示进度对话框。请参见useCustomDialo
一会儿就来Droid fu现在有点过时了,主要是因为缺少碎片支持。但我会举一个我用它编写的应用程序的例子 首先,活动类必须为BetterActivity(或BetterXXX活动)子类。在我的代码中,我使用了一个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
...
}
}
最后,至少您需要对结果进行一些处理,比如更新类变量或填充UI或其他。这是在之后的中完成的:
protected void after(Context context, Integer integer) {
if (integer >= someAcceptablePositiveConstant) {
mMainStuff = mStuff;
doSomethingInTheUIWithMainStuff();
} else {
//gah!
}
}
正如您所提到的,可以对该类执行更多操作,例如定义一个before()
覆盖,该覆盖在任务之前在UI线程上工作,或者定义一个failed()
/handleError()
来处理未检查/已检查的故障。这只是一个简单的例子,希望能有所帮助。Droid fu现在有点过时,主要是因为缺少碎片支持。但我会举一个我用它编写的应用程序的例子
首先,活动类必须为BetterActivity(或BetterXXX活动)子类。在我的代码中,我使用了一个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
...
}
}
最后,至少您需要对结果进行一些处理,比如更新类变量或填充UI或其他。这是在
之后的中完成的:
protected void after(Context context, Integer integer) {
if (integer >= someAcceptablePositiveConstant) {
mMainStuff = mStuff;
doSomethingInTheUIWithMainStuff();
} else {
//gah!
}
}
正如您所提到的,可以对该类执行更多操作,例如定义一个before()
覆盖,该覆盖在任务之前在UI线程上工作,或者定义一个failed()
/handleError()
来处理未检查/已检查的故障。这只是一个简单的例子,希望能有所帮助。多么痛苦的@ss!错误隐藏在BetterActivityHelper类中:
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;
}
});
公共静态进度对话框createProgressDialog(最终活动,
int progressDialogTitleId,int progressDialogMsgId){
ProgressDialog=新建ProgressDialog(活动);
if(progressDialogTitleId)
@ss中的一个痛苦!错误被隐藏在BetterActivityHelper类中:
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;
}
});
公共静态进度对话框createProgressDialog(最终活动,
int progressDialogTitleId,int progressDialogMsgId){
ProgressDialog=新建ProgressDialog(活动);
if(progressDialogTitleId)
很酷,谢谢你的回复。有没有比droid fu更好、更新的替代品?我不知道。也许可以看看cwac任务()对于更薄的AsyncTask实现,我不需要.cwac-task。与cwac task相反,BetterAsyncTask确保所有任务都已完成,不管发生什么,而且它还处理progressdialog(我的代码最有可能在这里失败)我发现了错误,但由于我的声誉分数太低,我还不能发布答案。请随意给我一点提示:)酷,谢谢你的回复。有没有更好、更先进的droid fu替代品?我不知道。也许可以看看cwac任务()对于更薄的AsyncTask实现,我不需要.cwac-task。与cwac task相反,BetterAsyncTask确保所有任务都已完成,不管发生什么,而且它还处理progressdialog(我的代码最有可能在这里失败)我发现了错误,但由于我的声誉分数太低,我还不能发布答案。请随意给我一点提示:)