gpt4 book ai didi

java - 在同一类的不同实现之间进行选择

转载 作者:搜寻专家 更新时间:2023-11-01 09:00:29 30 4
gpt4 key购买 nike

我不确定这是否可行,或者我的想法是否正确。

在Android开发者培训中Displaying Bitmaps EfficientlyAsyncTask 的自定义版本用于使代码与 HONEYCOMB 以下的 android 版本兼容。

这很棒 answer解释 AsyncTask 操作在 HONEYCOMB 前后的区别。指南中提供自定义版本的原因是 HONEYCOMB 之前的默认版本(任务池)很容易因 java.util.concurrent.RejectedExecutionException 而崩溃> 如果图像的 GridView 快速滚动。对于这种情况,默认的后 HONEYCOMB 版本(在附加线程上串行执行)是必需的。

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

我想做的是:

If the version is HONEYCOMB or greater, use the implementation of AsyncTask provided in the framework, whereas if it is earlier, use the AsyncTask implementation provided in my application.

这是否可能(以及如何)或者我应该以不同的方式考虑它?

编辑:我了解如何根据正在运行的 SDK_VERSION 提供条件。

我遇到的问题是 AsyncTask 是一个抽象类,这意味着我必须提供一个实现。例如。我有一个名为 myTaskAsyncTask,它扩展了 AsyncTask,如下所示:

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

我如何确定要扩展哪个版本的 AsyncTask

最佳答案

你可以这样做:

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+ 中可用

编辑:

您可以使用工厂设计模式来根据SDK版本决定创建哪个对象。

关于java - 在同一类的不同实现之间进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15423795/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com