Android使用ConvenientBanner控件性能优化

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vlong5461

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值