我对 Volley 有点不确定的是 RequestQueue、ImageLoader 对象和 ImageLoader.ImageCache 实现。
在我遇到的示例中,它们在 onCreate() 中实例化,但为每个活动创建新的请求队列似乎没有意义。我还有大量的活动和服务,我将在任何地方使用它。如果我确实必须在每个服务或活动中实例化它们,那么它们的成本有多高?
生产应用程序使用什么最佳实践来实例化和访问这些对象?
我对 Volley 的经验是,我会在 Application 类内部启动一个 RequestQueue,将其传递给应用程序的全局上下文。我看不出这样做的缺点,只是对 RequestQueue 进行静态引用,如下所示:
public class MyApplication extends Application
{
private static RequestQueue mRequestQueue;
@Override
public void onCreate() {
super.onCreate();
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
// Getter for RequestQueue or just make it public
}
在文档中,您可以为它引用的 Application 类:
在应用程序启动时、创建任何活动、服务或接收者对象(不包括内容提供者)之前调用。实现应该尽可能快(例如使用状态的延迟初始化),因为在此函数中花费的时间直接影响启动进程中第一个活动、服务或接收器的性能。如果您重写此方法,请务必调用 super.onCreate()。
因此,可以安全地假设我们的 RequestQueue 将可用于在服务、活动、加载器等中调度请求。
现在就 ImageLoader 而言,我将创建一个单例类来包装一些功能,这样您就只有一个 ImageCache 实例和一个 ImageLoader,例如。
public class ImageLoaderHelper
{
private static ImageLoaderHelper mInstance = null;
private final ImageLoader mImageLoader;
private final ImageCache mImageCache;
public static ImageLoaderHelper getInstance() {
if(mInstance == null)
mInstance = new ImageLoaderHelper();
return mInstance;
}
private ImageLoaderHelper() {
mImageCache = new MyCustomImageCache();
mImageLoader = new ImageLoader(MyApplication.getVolleyQueue(),mImageCache);
}
// Now you can do what ever you want with your ImageCache and ImageLoader
}
如果您想要一个非常好的 ImageLoading 与 volley 示例,请查看this示例项目确实很有用。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)