Android 如何有效地使用异步任务
我不熟悉安卓系统。我想问你们关于这项任务的事。我有一个活动显示项目(应用程序、歌曲、故事..)的详细信息。它需要许多相关数据,如屏幕截图、相关应用程序(歌曲、故事)等等。。。那么什么是Asynctask的最佳实现呢?我是为每个任务创建一个asynctask(例如:2个asynctask:1用于获取屏幕截图,1个用于获取相关项目…)还是将所有内容都放在doInBackGround中并发布进度Android 如何有效地使用异步任务,android,thread-safety,android-asynctask,Android,Thread Safety,Android Asynctask,我不熟悉安卓系统。我想问你们关于这项任务的事。我有一个活动显示项目(应用程序、歌曲、故事..)的详细信息。它需要许多相关数据,如屏幕截图、相关应用程序(歌曲、故事)等等。。。那么什么是Asynctask的最佳实现呢?我是为每个任务创建一个asynctask(例如:2个asynctask:1用于获取屏幕截图,1个用于获取相关项目…)还是将所有内容都放在doInBackGround中并发布进度 提前感谢。从面向对象的角度来看,业务逻辑应该始终与UI隔离。我会将所有业务调用(如getSong()、ge
提前感谢。从面向对象的角度来看,业务逻辑应该始终与UI隔离。我会将所有业务调用(如getSong()、getStore()等)隔离并集中到一个POJO中,并让我的活动类只关注UI操作/呈现,我就是这样做的:
公共类MyActivity扩展活动{
IBusinessDAO businessDAO;
... ...
私有类MyAsyncTask扩展了AsyncTask{
... ...
受保护的void doInBackground(void…参数){
businessDAO.getSong();
}
}
... ...
创建时的公共void(Bundle savedInstanceState){
if(runInTest)
businessDAO=新的MockBusinessDAO();
其他的
businessDAO=新的RealBusinessDAO();
新建myAsyncTask().execute();
}
}
希望能有所帮助。我已经在一个异步任务中实现了此类任务
private void _initCommonAsyncTask(AsyncTaskName currentTaskName,
String searchQuery) {
CommonAsyncTask task = new CommonAsyncTask(currentTaskName, searchQuery);
task.execute();
taskReference = new WeakReference<CommonAsyncTask>(task);
}
/**
* Asynchronous Task for different functionalities.
*
*/
private class CommonAsyncTask extends AsyncTask<Void, Void, Void> {
private final String searchQuery;
private AsyncTaskName currentTaskName;
/**
* Default constructor
*/
public CommonAsyncTask(AsyncTaskName currentTaskName, String searchQuery) {
super();
this.searchQuery = searchQuery;
this.currentTaskName = currentTaskName;
}
@Override
protected void onPostExecute(Void result) {
switch (currentTaskName) {
case SEARCH:
// Reinitialized the list view
break;
case REFRESH:
// Reinitialized the list view
break;
case LOAD_NEXT:
// Reinitialized the list view
break;
default:
break;
}
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
switch (currentTaskName) {
case SEARCH:
// My searching stuff here
break;
case REFRESH:
// my refreshing stuff here
break;
case LOAD_NEXT:
//my load next 50 orders here
break;
default:
break;
}
return null;
}
}
在枚举中定义任务列表,如下所示
public enum AsyncTaskName {
SEARCH, REFRESH, LOAD_NEXT;
}
对于您的任务,最好使用ready-ready libs:谢谢,我已经在我的应用程序中使用了谷歌电视的imageloader:DMay be我没有解释清楚。我的应用程序很喜欢安卓市场。例如:在详细的应用程序活动中,它显示应用程序屏幕截图、同一类别应用程序、同一提供商应用程序、推荐应用程序。所以我创建了4个asynctask来获取数据,或者将4个函数放在一个asynctask中,并通过调用publishProgress来更新UI。哪种方法更有效。我读过不同的歌曲,应用程序,故事模型。。。和伪造数据:我个人更喜欢使用publishProgress的单个异步任务,只要所有耗时的任务都在后台线程中处理,使用一个任务就足够了,而且比使用多个任务更有效。
_initCommonAsyncTask(AsyncTaskName.SEARCH, searchQuery);
public enum AsyncTaskName {
SEARCH, REFRESH, LOAD_NEXT;
}