我有以下 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
方法你想要的方式。因此,假设您已经定义了一个名为 customAsyncTask
的 AsyncTask
,要执行它,您只需调用 executeAsyncTask(new customAsyncTask(your_params));
您可以在 static
类中定义上述方法(使该方法也 static
)以便于访问。
希望对您有所帮助:)
关于android - 禁止使用 AsyncTask,使用自定义 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11229734/