我试图编写一个执行通用AsyncTasks的静态实用程序函数。 我想出了这个:
public static void executeAsync(Class<? extends AsyncTask<?, ?, ?>> task, Object[] params) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
} else {
task.execute(params);
}
}
但它甚至不能编译......任何想法?
答案 0 :(得分:1)
Params的类型为Object [],但ASyncTask的类型为&#34;任何&#34; (<?>
)。但Java不支持一系列泛型。所以?[] params
是不可能的。
也许使用<? extends Object>
帮助。
答案 1 :(得分:1)
仅使用:
public static void executeAsync(AsyncTask<?, ?, ?> task, Object[] params) {
而不是:
public static void executeAsync(Class<? extends AsyncTask<?, ?, ?>> task, // ...
因为你不需要传递类而是实际的实例。
修改强>
正如您在评论中提到的,还存在参数化类型不匹配,因此您还需要调整参数类型。签名应如下所示:
public static void executeAsync(AsyncTask<Object, ?, ?> task, Object[] params)
或(为了使其更多&#34;灵活&#34;)
public static <T> void executeAsync(AsyncTask<T, ?, ?> task, T... params) {
如果启用了lint,也可以预期压缩lint注释@SuppressLint({ "InlinedApi", "NewApi" })
。
答案 2 :(得分:0)
使用服务更简单,可以多次启动