使用RoboSpice执行Parellel(Parellel execution with RoboSpice)
通过RoboSpice异步执行大量请求的最简单方法是什么?
我在某处读到了我需要实现一个RequestRunner但我不知道将它与SpiceManager合并的方式,任何想法?
What's the easiest way to execute a bunch of requests asynchronously via RoboSpice?
I read somewhere that I need to implement a RequestRunner but I don't know the way to merge it with SpiceManager, Any ideas?
最满意答案
您可以覆盖可用线程的数量,定义您自己的自定义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; } }You can override the num of thread available, defining your own custom 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; } }After that you can use your new spiceService in you manager:
private SpiceManager spiceManager = new SpiceManager(CustomSpiceService.class);As a bonus, you can detect the the type of your connection, so you can have more threads if you are in a Wifi connection.
/** * 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; } }更多推荐
发布评论