package org.aisen.android.ui.fragment; import android.app.Fragment; import android.os.Handler; import android.view.View; import org.aisen.android.common.utils.Logger; import org.aisen.android.component.bitmaploader.BitmapLoader; import java.io.Serializable; /** * 自动释放和刷新页面<br/> * 如果Tab页面的图片资源非常多,可以继承这个自动进行释放 * * Created by wangdan on 15/4/22. */ public abstract class AAutoReleaseStripTabsFragment<T extends AStripTabsFragment.StripTabItem> extends AStripTabsFragment<T> { @Override public void onPageSelected(int position) { super.onPageSelected(position); // 释放资源 mHandler.removeCallbacks(releaseFragmentRunnable); mHandler.postDelayed(releaseFragmentRunnable, Math.round(2.0f * 1000)); // 刷新当前显示 mHandler.removeCallbacks(refreshFragmentRunnable); mHandler.postDelayed(refreshFragmentRunnable, 700); } @Override public void onDestroy() { super.onDestroy(); mHandler.removeCallbacks(refreshFragmentRunnable); mHandler.removeCallbacks(releaseFragmentRunnable); } Runnable refreshFragmentRunnable = new Runnable() { @Override public void run() { Fragment fragment = fragments.get(mViewPagerAdapter.makeFragmentName(mCurrentPosition)); if (fragment != null && fragment instanceof ARefreshFragment) { Logger.w(String.format("刷新第%d个fragment的资源", mCurrentPosition)); BitmapLoader.getInstance().clearCache(); ((ARefreshFragment<Serializable, Serializable, View>) fragment).refreshUI(); } } }; Runnable releaseFragmentRunnable = new Runnable() { @Override public void run() { Logger.w(String.format("准备释放第%d个fragment的资源", mCurrentPosition + 1)); Logger.w(String.format("准备释放第%d个fragment的资源", mCurrentPosition - 1)); releaseFragment(mCurrentPosition + 1); releaseFragment(mCurrentPosition - 1); } }; public void releaseFragment(int position) { if (position < mItems.size() && position >= 0) { Fragment fragment = fragments.get(mViewPagerAdapter.makeFragmentName(position)); if (fragment != null && fragment instanceof ARefreshFragment) { Logger.w(String.format("释放第%d个fragment的资源", position)); ((ARefreshFragment<Serializable, Serializable, View>) fragment).releaseImageViewByIds(); } else { Logger.e(String.format("释放的第%d个fragment不存在", position)); } } } Handler mHandler = new Handler() { }; }