1

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

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);
        }
    }
}

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

  • AsyncTask,只MyAsyncTask应该使用。
  • 中的execute()函数MyAsyncTask

是否有可能做到这一点?

4

2 回答 2

2

我这样做的想法会有点不同。您可以创建一个将要使用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's AsyncTask类并以您想要的方式覆盖该execute方法。因此,假设您已经定义了一个AsyncTask命名customAsyncTask,只需调用即可执行它您可以在类executeAsyncTask(new customAsyncTask(your_params));中定义上述方法(也可以创建该方法)以便于访问。staticstatic

希望有帮助:)

于 2012-07-05T22:22:44.667 回答
0

不要导入AsyncTask,只导入你的MyAsyncTask类。这样,您的班级是唯一可用的选择。

我想您可以覆盖主文件中的 AsyncTask 方法。但是,您的 MyAsyncTask 必须有一个新的类文件,否则它不会正确继承它。

于 2012-06-27T15:46:28.900 回答