Android自定义工具类TimerThread

写惯了C++、Java、py这些语言的程序猿们在上手安卓的时候一定会遇到各种各样的令人无力的bug。在掉进安卓各种深坑之后,我这留下了几个非常实用的小工具。说是工具,其实有的是自己继承的类,也有的是自定义View,这篇文章要说的就是我前段时间完成三本安卓课程大作业用的最多的工具类TimerThread.


封装这个类这具体起因就是我想在进入一个Activity之后顺序执行三个动画。但是,我清楚地记得我忙活了一整天也没实现这个事情。顺序执行一段代码这种天经地义的事情在安卓里却没有办法实现,由此可见它是多么糟糕的框架。我这个类的作用是注册一个将要在一段时间之后运行一定次数的函数,也就是说,如果想让某Activity的onCreate执行过后开始顺序执行代码,只要把要执行的代码放在一个函数里,然后在onCreate里将函数注册到我这个类里就可以了。


先上代码。

import android.os.Handler;
import android.os.Looper;
import android.os.Message;

import java.util.Timer;
import java.util.TimerTask;

public class TimerThread {
    int total = 1;
    int tmp = 0;
    Timer timer = new Timer();

    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            tmp++;
            if(tmp==total)timer.cancel();
        }
    };

    public TimerThread(int delay, int period, int total){
        this.total = total;

        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                tick();
                handler.sendMessage(new Message());
            }
        };
        timer.schedule(task, delay, period);
    }
    protected void tick(){

    }
    public void finish(){
        timer.cancel();
        tmp = -1;
    }
}


代码的具体思路呢就是新开一个计时器,也就是新开一个线程。这样,在onCreate之后就有了一个可以顺序执行代码的机会。具体用法如下:

public static Handler handler = new Handler();
new TimerThread(1200, 1200, 4){
    @Override
    protected void tick(){
        handler.post(new Runnable() {
            @Override
            public void run() {
                //Your code here.
            }
        });
    }
};

hander的作用是使得run()里面的代码可以操作控件,如果内部没有操作控件也就不用handler了,直接在tick()里完成代码就可以了。TimerThread构建时的参数意义分别为:第一次tick开始执行的时间、之后每次tick()之间的间隔、一共需要执行几次tick。开始执行的时间是从当前代码执行的时间开始计时的,单位为毫秒。如果事先不知道一共需要执行几次,第三个参数填0,然后需要退出这个TimerThread的时候调用它的finish方法即可。注意!!!这个finish不要和Activity的finish混掉!一开始命名的时候没有考虑到这点,导致后来掉进了自己挖的坑里,当然大家可以把finish方法的名字改了,这样也就不会混了。


虽然这个TimerThread为顺序执行代码提供了可能,但是很重要的一点是它没办法提供返回值。因为tick执行的时候,它的调用者早就运行完了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值