content: /*
   * Created by LuaView.
   * Copyright (c) 2017, Alibaba Group. All rights reserved.
   *
   * This source code is licensed under the MIT.
   * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
   */
  
  package com.taobao.luaview.view.imageview;
  
  import android.app.Activity;
  import android.app.Application;
  import android.os.Bundle;
  
  import java.lang.ref.WeakReference;
  import java.util.ArrayList;
  
  /**
   * activity堆叠的时候释放资源处理
   */
  public class ImageActivityLifeCycle implements Application.ActivityLifecycleCallbacks {
      private static ImageActivityLifeCycle instance;
      private ArrayList<WeakReference<BaseImageView>> weakReferenceList = new ArrayList<WeakReference<BaseImageView>>();
  
      public static ImageActivityLifeCycle getInstance(Application application) {
          if (instance == null) {
              instance = new ImageActivityLifeCycle();
              application.registerActivityLifecycleCallbacks(instance);
          }
          return instance;
      }
  
      public void watch(BaseImageView imageView) {
          weakReferenceList.add(new WeakReference<BaseImageView>(imageView));
      }
  
      @Override
      public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
      }
  
      @Override
      public void onActivityStarted(Activity activity) {
          int size = weakReferenceList.size();
          for (int i = size - 1; i >= 0; i--) {
              BaseImageView imageView = weakReferenceList.get(i).get();
              if (imageView == null) {
                  weakReferenceList.remove(i);
              } else {
                  if (imageView.getContext() == activity) {
                      imageView.restoreImage();
                  }
              }
          }
      }
  
      @Override
      public void onActivityResumed(Activity activity) {
  
      }
  
      @Override
      public void onActivityPaused(Activity activity) {
  
      }
  
      @Override
      public void onActivityStopped(Activity activity) {
          int size = weakReferenceList.size();
          for (int i = size - 1; i >= 0; i--) {
              BaseImageView imageView = weakReferenceList.get(i).get();
              if (imageView == null) {
                  weakReferenceList.remove(i);
              } else {
                  if (imageView.getContext() == activity) {
                      imageView.releaseBitmap();
                  }
              }
          }
      }
  
      @Override
      public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
  
      }
  
      @Override
      public void onActivityDestroyed(Activity activity) {
          int size = weakReferenceList.size();
          for (int i = size - 1; i >= 0; i--) {
              BaseImageView imageView = weakReferenceList.get(i).get();
              if (imageView == null) {
                  weakReferenceList.remove(i);
              } else {
                  if (imageView.getContext() == activity) {
                      imageView.releaseBitmap();
                  }
              }
          }
      }
  }