项目中使用了ConvenientBanner,在使用中发现有内存溢出和cpu占用过高的问题
优化内存溢出:
修改前:
private Handler timeHandler = new Handler();
private Runnable adSwitchTask = new Runnable() {
@Override
public void run() {
if (viewPager != null && turning) {
int page = viewPager.getCurrentItem() + 1;
viewPager.setCurrentItem(page);
timeHandler.postDelayed(adSwitchTask, autoTurningTime);
}
}
};
修改后:
private static Handler timeHandler = new Handler();
private WeakReference<ConvenientBanner> weakReference = new WeakReference<ConvenientBanner>(this);
public Runnable adSwitchTask = new Runnable() {
@Override
public void run() {
ConvenientBanner _instance = weakReference.get();
if (_instance != null) {
if (_instance.viewPager != null && _instance.turning) {
int page = _instance.viewPager.getCurrentItem() + 1;
_instance.viewPager.setCurrentItem(page);
_instance.timeHandler.postDelayed(_instance.adSwitchTask, _instance.autoTurningTime);
}
}
}
};
banner引起的cup占用过高问题
修改前
@Override
public void onScroll(AbsListView arg0, int firstVisibleItem, int arg2, int arg3) {
if (expandListView.getChildAt(1) != null && firstVisibleItem == 1) {
int top = Math.abs(expandListView.getChildAt(0).getTop());
float alp = top / (DataMgr.screenDensity * 160);
if (alp > 1) {
llTopbar.setAlpha(1);
} else {
llTopbar.setAlpha(alp);
}
} else if (firstVisibleItem == 0) {
llTopbar.setAlpha(0);
}
修改后
@Override
public void onScroll(AbsListView arg0, int firstVisibleItem, int arg2, int arg3) {
if (expandListView.getChildAt(1) != null && firstVisibleItem == 1) {
ConvenientBanner imageBanner = (ConvenientBanner) expandListView.getChildAt(0).findViewById(R.id.imageBanner);
int top = Math.abs(expandListView.getChildAt(0).getTop());
float alp = top / (DataMgr.screenDensity * 160);
if (alp > 1) {
llTopbar.setAlpha(1);
if(imageBanner!=null) {
imageBanner.stopTurning();
}
} else {
llTopbar.setAlpha(alp);
if(imageBanner!=null) {
imageBanner.startTurning(5000);
}
}
} else if (firstVisibleItem == 0) {
llTopbar.setAlpha(0);
}
修改前
@Override
protected void onDestroy() {
super.onDestroy();
mHandler.removeCallbacksAndMessages(null);
}
修改后
@Override
protected void onDestroy() {
super.onDestroy();
mHandler.removeCallbacksAndMessages(null);
ConvenientBanner imageBanner = (ConvenientBanner) expandListView.getChildAt(0).findViewById(R.id.imageBanner);
if(imageBanner!=null) {
imageBanner.stopTurning();
}
}