android - 禁止使用 AsyncTask,使用自定义 AsyncTask

标签 android android-asynctask class-visibility

我有以下 AsyncTask 的实现,允许多个 AsyncTask 同时运行:

public abstract class MyAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {

    public AsyncTask<Params, Progress, Result> executeCompat(Params... params) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            return executeOnExecutor(THREAD_POOL_EXECUTOR, params);
        } else {
            return execute(params);
        }
    }
}

现在为了避免混淆和意外使用正常的 AsyncTask,我想阻止从我的代码访问:

  • AsyncTask 类,只能使用MyAsyncTask
  • MyAsyncTask 中的execute() 函数。

这有可能吗?

最佳答案

我这样做的想法会有点不同。您可以创建一个方法,将要使用的 AsyncTask 作为参数,而不是扩展 AsyncTask 类。这是一个例子:

public void executeAsyncTask(AsyncTask asyncTask) {

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        asyncTask.executeOnExecutor(THREAD_POOL_EXECUTOR, params);
    } else {
        asyncTask.execute(params);
    }
}

有了这个,你只需要实例化你想使用的 AsyncTask,而不用担心你提到的问题,因为你将扩展 Android 的 AsyncTask 类,覆盖了 execute 方法你想要的方式。因此,假设您已经定义了一个名为 customAsyncTaskAsyncTask,要执行它,您只需调用 executeAsyncTask(new customAsyncTask(your_params)); 您可以在 static 类中定义上述方法(使该方法也 static)以便于访问。

希望对您有所帮助:)

关于android - 禁止使用 AsyncTask,使用自定义 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11229734/

相关文章:

java - AsyncTask 中的 ProgressDialog 关闭不起作用

java - 如何更改 AsyncTask 中的 ListView?

android - 如何在android中显示两种颜色的文本?

java - 如何使用 Square 的 Retrofit 网络库实现异步回调

android - 在操作栏中显示进度条而不是刷新菜单项

java - 谷歌地图从异步任务 onPostExecute 在 Canvas 上叠加绘图

Javascript方式设计继承+隐私

java - 从单独的类文件访问公共(public)静态类的状态

c++ - 在私有(private)嵌套类上使用 using 指令

java - Android 全屏模式下不显示首选项屏幕