2014-12-03 80 views
0

我想写一个执行通用AsyncTasks的静态实用程序函数。 我想出了这个:执行通用AsyncTask

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

但它不够好,甚至编译..任何想法?

回答

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) 

或(以使其更加“灵活”)

public static <T> void executeAsync(AsyncTask<T, ?, ?> task, T... params) { 

一个剿皮棉注释@SuppressLint({ "InlinedApi", "NewApi" })也可以,如果你启用了皮棉的预期。

+0

谢谢。必须更改?的对象,所以请更新.. public static void executeAsync(AsyncTask task,Object [] params) – 2014-12-03 13:36:17

+1

You are right。事实上,只需执行'executeAsync(AsyncTask task,Object [] params)' - 只有第一个参数化类型是相关的。 – 2014-12-03 13:41:37

+0

调用函数时遇到问题.. GetGoogleProfileTask task = new GetGoogleProfileTask(data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME)); executeAsync(task,null); 给出了一个编译错误 – 2014-12-03 14:08:09

0

它simplier使用服务,它可以发射多次

1

params为类型对象[],但的AsyncTask的类型是“任何”(<?>)。但是Java不支持泛型数组。所以?[] params是不可能的。

也许使用<? extends Object>有帮助。

+0

不,但让我更接近。谢谢。 – 2014-12-03 13:34:34