2

我不确定这是否可能,或者我是否正确地考虑了这一点。

在高效显示位图的 Android 开发人员培训中,使用了自定义版本的 ,AsyncTask以使代码与以下 android 版本兼容HONEYCOMB

这个很好的答案AsyncTask解释了pre 和 post 中的操作之间的区别HONEYCOMB。指南中提供自定义版本的原因是,如果快速滚动图像,pre HONEYCOMB(任务池)中的默认值很容易崩溃。对于这种情况,需要默认发布版本(在附加线程上串行执行)。java.util.concurrent.RejectedExecutionExceptionGridViewHONEYCOMB

我可以通过在我的项目中使用更新版本的 来轻松做到这一点AsyncTask(就像在开发人员培训示例中所做的那样),但这与未来的更改不太兼容。

我想做的是以下几点:

如果版本是HONEYCOMB或更高,请使用 AsyncTask框架中提供的实现,而如果版本更早,请使用AsyncTask我的应用程序中提供的实现。

这可能(以及如何)还是我应该以不同的方式思考它?

编辑: 我了解如何根据 running 提供条件SDK_VERSION

我遇到的问题是这AsyncTask是一个抽象类,这意味着我必须提供一个实现。例如,我有一个AsyncTask调用myTask,其扩展AsyncTask如下:

public class myTask extends AsyncTask<Void, Void, Void> {
    // Implementations for the abstract functions (doInBackground)
}

我如何决定AsyncTask扩展哪个版本?

4

2 回答 2

2

您可以执行以下操作:

if(android.os.Build.VERSION.SDK_INT >= 11){ // Honeycomb
{
  AsyncTask taskObj = new DefaultAsyncTaskImpl();
  taskObj.execute();  
} else {
  AsyncTask taskObj = new CustomAsyncTaskImpl();
  taskObj.execute();
}

并在您的代码中定义两个类,其中第一个扩展AsyncTask,第二个是您自己的实现

注意:SDK_INT在 API 4+ 中可用

编辑:

您可以factory design pattern根据 SDK 版本来决定创建哪个对象。

于 2013-03-15T02:48:07.923 回答
1
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            // Use built in AysncTask
        } else {
            // Use your AsyncTask
        }

您需要检查操作系统版本

于 2013-03-15T02:48:50.030 回答