Android Open Source - WebImageView Reference Watcher






From Project

Back to project page WebImageView.

License

The source code is released under:

Apache License

If you think the Android project WebImageView listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/* Copyright (c) 2012 Yelp Inc
 */*from  w  ww .j  a  va 2 s. c  o m*/
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.yelp.android.webimageview;

import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;

public class ReferenceWatcher<T> {

  private final ReferenceQueue<? super T> mQueue;
  private HashSet<Reference<T>> mRefs;
  private final int mThreshold;

  private final AtomicInteger mCount;


  public ReferenceWatcher() {
    this(20);
  }

  public ReferenceWatcher(int threshold) {
    mQueue = new ReferenceQueue<T>();
    mRefs = new HashSet<Reference<T>>();
    mThreshold = threshold;
    mCount = new AtomicInteger();
  }

  public void watch(T ref) {
    mRefs.add(new SoftReference<T>(ref, mQueue));
    if (mCount.incrementAndGet() >= mThreshold) {
      clean();
    }
  }

  @SuppressWarnings({ "unchecked", "rawtypes" })
  private final void clean() {
    Reference ref = null;
    while((ref = mQueue.poll()) != null) {
      T value = (T)ref.get();
      if (value != null) {
        mRefs.remove(value);
      }
    }
  }

  public Set<T> getSnapShotAndClean() {
    clean();
    HashSet<T> values = new HashSet<T>();
    for (Reference<T> tempRef : mRefs) {
      T value = tempRef.get();
      if(value != null) {
        values.add(value);
      }
    }
    mCount.set(mRefs.size());

    return values;
  }
}




Java Source Code List

com.yelp.android.webimageview.DebugLogger.java
com.yelp.android.webimageview.FileWritingInputStream.java
com.yelp.android.webimageview.ImageCache.java
com.yelp.android.webimageview.ImageLoaderHandler.java
com.yelp.android.webimageview.ImageLoader.java
com.yelp.android.webimageview.ReferenceWatcher.java
com.yelp.android.webimageview.WebImageView.java
com.yelp.common.base.FinalizableReferenceQueue.java
com.yelp.common.base.FinalizableReference.java
com.yelp.common.base.FinalizableSoftReference.java
com.yelp.common.base.FinalizableWeakReference.java
com.yelp.common.base.Function.java
com.yelp.common.base.Objects.java
com.yelp.common.base.internal.Finalizer.java
com.yelp.common.collect.AbstractMapEntry.java
com.yelp.common.collect.AsynchronousComputationException.java
com.yelp.common.collect.ComputationException.java
com.yelp.common.collect.CustomConcurrentHashMap.java
com.yelp.common.collect.ExpirationTimer.java
com.yelp.common.collect.MapMaker.java
com.yelp.common.collect.NullOutputException.java