2012-06-27 21 views
1

,我有以下實施AsyncTask,允許多個AsyncTask s到並行運行:禁止使用的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

可以做到這一點嗎?

回答

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'sAsyncTaskexecute方法,你所希望的方式的問題使用。因此,假設您定義了名爲customAsyncTaskAsyncTask,要執行它,您只需撥打電話executeAsyncTask(new customAsyncTask(your_params));。您可以在static類(使方法也爲static)中定義上述方法,以便於訪問。

希望幫助:)

+0

這確實能解決我的問題!謝謝! – nhaarman

+0

很高興我能幫忙:-) – Angelo

0

請勿導入AsyncTask,只導入MyAsyncTask類。這樣你的課是唯一可用的選擇。

我想你可以覆蓋主文件中的AsyncTask方法。但是,您必須爲MyAsyncTask創建一個新的類文件,否則它將無法正確繼承它。

+0

Eclipse會自動導入任何缺失的類,所以這不是一個選項。 – nhaarman

+0

真的沒有辦法在java中原生地阻止一個公共類。 –

+0

我想你可以覆蓋主文件中的AsyncTask方法。但是,您必須爲MyAsyncTask創建一個新的類文件,否則它將無法正確繼承它。 –