Android使用ConvenientBanner控件性能优化

    xiaoxiao2021-03-25  33

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

    转载请注明原文地址: https://ju.6miu.com/read-80297.html

    最新回复(0)