关于轮播图中Handler迭代延时调用自己应用退出无法销毁问题

在制作轮播图中常常用handler去延时调用自己本身run()的方法达到定时刷新的目的
如:

class HomeTask implements Runnable {
        private void start() {
            UIUtils.getHanHandlerdler().removeCallbacksAndMessages(null);// 取消handler的所有消息
//UIUtils.getHandler()是封装好的可以获得一个Handler的方法
            UIUtils.getHandler().postDelayed(this, 3000);
        }

        @Override
        public void run() {
            int currentItem = pager.getCurrentItem();//page是viewpage对象
            pager.setCurrentItem(currentItem + 1);
            UIUtils.getHandler().postDelayed(this, 3000);
            System.out.println("下一个图");//根据日志判断退出后该方法是不是还在执行
            }
        }

    }

当我在new HomeTask().start();后,viewpage便开始循环轮播,但是你会发现即使你退出应用该循环效果也会一直执行下去,从而很可能应用也并没有真的退出,我们要做到应用退出后(或activity Finnish掉)就不在循环,我采取的方法是在调用handler的class里想办法得到一个包含要调用的activity,这样就可以用Activity.isFinishing()方法来判断activity是不是在结束了
google翻译这么说的:
检查这个活动(Activity)是否正在完成(isFinishing),无论是因为您在其上调用了{@link #finish}或其他人请求完成。 这通常用在{@link #onPause}中,以确定活动是暂停还是完全完成。
修改后的类为

class HomeTask implements Runnable {
        private void start() {
            UIUtils.getHandler().removeCallbacksAndMessages(null);// 取消所有消息
            UIUtils.getHandler().postDelayed(this, 3000);
        }

        @Override
        public void run() {
            int currentItem = pager.getCurrentItem();
            pager.setCurrentItem(currentItem + 1);
            if (!mActivity.isFinishing()) {
                UIUtils.getHandler().postDelayed(this, 3000);
                System.out.println("下一个图");
            }
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值