我不确定这是否可行,或者我是否正确地考虑了这一点。
在Displaying Bitmaps Efficiently的Android开发者培训中,AsyncTask
的自定义版本用于使代码与HONEYCOMB
以下的Android版本兼容。
这篇出色的answer解释了前AsyncTask
前后HONEYCOMB
操作之间的差异。在指南中提供自定义版本的原因是,如果滚动HONEYCOMB
图像,则java.util.concurrent.RejectedExecutionException
(任务池)中的默认值很容易会因GridView
而崩溃很快。对于这种情况,默认发布HONEYCOMB
版本(在附加线程上执行串行)是必需的。
我可以通过在我的项目中使用更新版本的AsyncTask
轻松完成此操作(就像在开发人员培训示例中所做的那样),但这与将来的更改不太兼容。
我想做的是以下内容:
如果版本为
HONEYCOMB
或更高版本,请使用。的实现 框架中提供了AsyncTask
,如果是更早,请使用 我的申请中提供的AsyncTask
实施。
这可能(以及如何)或者我应该以不同的方式思考它吗?
修改
我了解如何根据正在运行的SDK_VERSION
提供条件。
我遇到的问题是AsyncTask
是一个抽象类,这意味着我必须提供一个实现。
例如。我有AsyncTask
名为myTask
,其扩展名为AsyncTask
,如下所示:
public class myTask extends AsyncTask<Void, Void, Void> {
// Implementations for the abstract functions (doInBackground)
}
如何确定AsyncTask
的哪个版本已扩展?
答案 0 :(得分:2)
您可以执行以下操作:
if(android.os.Build.VERSION.SDK_INT >= 11){ // Honeycomb
{
AsyncTask taskObj = new DefaultAsyncTaskImpl();
taskObj.execute();
} else {
AsyncTask taskObj = new CustomAsyncTaskImpl();
taskObj.execute();
}
在您的代码中定义两个类,其中第一个扩展AsyncTask
,第二个是您自己的实现
注意:API 4 +中提供了SDK_INT
修改强>
您可以使用factory design pattern
根据SDK版本决定要创建哪个对象。
答案 1 :(得分:1)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// Use built in AysncTask
} else {
// Use your AsyncTask
}
您需要检查操作系统版本