项目中使用了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(); } }