从主UI线程以外的线程调用Volley是否安全?

时间:2013-12-09 17:05:59

标签: android android-volley

Volley ImageLoader强制要求应从主UI线程启动请求:

public ImageContainer get(String requestUrl, ImageListener imageListener,
        int maxWidth, int maxHeight) {
    // only fulfill requests that were initiated from the main thread.
    throwIfNotOnMainThread();

我认为这是为了保证响应回调发生在主UI线程上,可能是因为假设调用者想要更新回调中的UI。

但是,我想在处理GCM通知时使用Volley,GCM通知只需要发送PendingIntent,而不是直接更新UI。我想知道在这种特殊情况下删除throwIfNotOnMainThread()是否安全。我怀疑那是安全的,但我想知道是否有人能说出一个充分的理由呢?

(仅供参考,看起来RequestQueue已同步访问mCurrentRequests,因此Volley内的请求队列似乎存在内部锁定。)

1 个答案:

答案 0 :(得分:0)

我不建议删除该保护,因为ImageContainer的一般用例确实会更改UI。

更好的方法IMO可以直接将RequestQueue用于自定义请求,并按照您的需要进行处理。