2014-07-16 59 views
1

有兩種方法將參數傳遞給一個AsyncTask類型安全的替代方案中的AsyncTask

  1. 定義第一個泛型參數和使用列表這種類型化的/陣列,並使之通過​​
  2. 執行參數通過構造函數傳遞所有必要的參數,將它們存儲在一個領域和execute

我覺得第一種方法更具有可讀性訪問它們,但有時缺乏靈活性類型安全方面,對於實例如果你想傳遞一個字符串,一個整數和一個布爾值,似乎不清楚如何處理這個問題。

public Result doInBackground(String... params) { 
    String param1 = params[0]; 
    int param2 = Integer.valueOf(params[1]); 
    boolean param3 = Boolean.valueOf(params[2]); 
    // ... 
} 

字符串解析,把它在一個Bundle等總有一個解決方案,但我覺得這是令人討厭但從語義/方法簽名點。任何替代品?

+1

我使用構造函數的方法。並且沒有什麼能阻止你在AsyncTask上定義另一個方法(或一組方法)以另一種方式收集數據(例如,給它一個流暢的構建器樣式的API)。 – CommonsWare

回答

1

爲什麼不爲例

創建一個類持有人
static Class Holder { 
    int i; 
    String s; 
    boolean b; 
} 

public Result doInBackground(Holder... params) { 
    Holder holder = params[0]; 
    String holder.s; 
    // ... 
} 

然後通過發送到doBackground()的execute().. 我做了很多次,當我要發送到網絡

這只是一個例子。 希望它有幫助。

0

您可以改爲使用Loaders

開始時可能很麻煩,但是您不會遇到任何類型安全問題,因爲它以完全不同的方式工作。

裝載機的主要功能是它們與一個綁定到Activity/Fragment生命週期的管理器一起工作。