2014-12-03 52 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