我正在制作一个Android应用程序"兼容"从2.3到4的任何Android版本......我想要完成的是制作一个从AsyncTask扩展的泛型类,可以用来处理后台不同的任务。我一直在阅读并找到了类似的工作:
AsyncTask task = new YourTask();
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) {
task.execute(params);
} else {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
}
我只是不想每次都需要使用AsyncTask来执行此操作.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)我应该使用executeOnExecutor以在支持它的任何东西上获得更好的性能而不是execute();
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// Any task
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}.execute();
} else {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
//Any task
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);//This is the different thing.
}
问题在于,并非所有任务都相同,因此参数会发生变化,而这些任务的结果也会发生变化。有人遇到同样的问题吗?任何推荐?
提前致谢。
答案 0 :(得分:1)
将逻辑添加到重写的execute()
方法。然后拨打YourTask.execute()
。
public final AsyncTask<Params, Progress, Result> execute(Params... params) {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) {
super.execute(params);
} else {
super.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
}
}