2014-03-01 41 views
1

通過RoboSpice以異步方式執行一堆請求最簡單的方法是什麼?使用RoboSpice執行Parellel

我在某處閱讀我需要實施RequestRunner,但我不知道如何將它與SpiceManager合併,任何想法?

回答

5

您可以覆蓋線程的NUM可用,定義自己的自定義SpiceService:

public class CustomSpiceService extends RetrofitGsonSpiceService { 
     /** 
     * Overrides the number of threads that will be used to make requests. The default 
     * is 1. 
     */ 
     @Override 
     public int getThreadCount(){ 
     return NUM_THREAD; 
     } 
    } 

你可以使用你的新spiceService在你的經理之後:

private SpiceManager spiceManager = new SpiceManager(CustomSpiceService.class); 

作爲獎勵,你可以檢測到您的連接類型,因此如果您使用Wifi連接,則可以擁有更多線程。

/** 
* Overrides the number of threads that will be used to make requests. The default 
* is 1, so if we are on a fast connection we use 4, otherwise we use 2. 
*/ 
@Override 
public int getThreadCount() { 

    ConnectivityManager connectivityManager = 
      (ConnectivityManager) DaftApp.getInstance().getSystemService(CONNECTIVITY_SERVICE); 

    NetworkInfo info = connectivityManager.getActiveNetworkInfo(); 
    if(info==null){ 
     return 2; // there is no network available now. Anyway we use the default num of thread 
    } 
    switch (info.getType()) { 
     case ConnectivityManager.TYPE_WIFI: 
     case ConnectivityManager.TYPE_WIMAX: 
     case ConnectivityManager.TYPE_ETHERNET: 
      return 4; 
     case ConnectivityManager.TYPE_MOBILE: 
      return 2; 
     default: 
      return 2; 
    } 
} 
+0

這是一個很好的答案。此外,請注意至少爲UI線程留出一個免費的內核。因此,分配給RS的理想核心編號應該最大程度地等於設備的內核數量 - 1。 – Snicolas