Android 定时任务总结

Android 定时任务总结


public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button timer_1, timer_2, timer_3, timer_4,timer_5,clear;
TextView showTime;
private Timer timer;
private TimerTask timerTask;
private int num = 0; //计数值
private boolean flog = true; //是否停止计时
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
showTime.setText("点击我停止计时: " + msg.what);
}
};
//handler 方式定时循环
private Handler handlerTimer = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (flog) {
handlerTimer.sendEmptyMessageDelayed(num++, 1000);
}
showTime.setText("点击我停止计时: " + msg.what);
if(flog == false) {
flog = true;
}
}
};
private Disposable disposable;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.btn_new_activity).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(MainActivity.this,MainActivity.class));
        }
    });
    timer_1 = (Button) findViewById(R.id.timer_1);
    timer_2 = (Button) findViewById(R.id.timer_2);
    timer_3 = (Button) findViewById(R.id.timer_3);
    timer_4 = (Button) findViewById(R.id.timer_4);
    timer_5 = (Button) findViewById(R.id.timer_5);
    clear = (Button) findViewById(R.id.clear);
    showTime = findViewById(R.id.show_time);
    timer_1.setOnClickListener(this);
    timer_2.setOnClickListener(this);
    timer_3.setOnClickListener(this);
    timer_4.setOnClickListener(this);
    timer_5.setOnClickListener(this);
    clear.setOnClickListener(this);
    showTime.setOnClickListener(this);
}
@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.timer_1:
            method_1();
            break;
        case R.id.timer_2:
            method_2();
            break;
        case R.id.timer_3:
            method_3();
            break;
        case R.id.timer_4:
            method_4();
            break;
        case R.id.timer_5:
            method_5();
            break;
        case R.id.clear:
            num = 0;
            showTime.setText("请选择一种启动方式");
            break;
        case R.id.show_time:
            flog = false;
            break;
    }
}

private void method_1() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            while (flog) {
                handler.sendEmptyMessage(num++);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }).start();
    flog = true;
}
private void method_2() {
    //new Thread().start();
    new Thread() {
        @Override
        public void run() {
            super.run();
            while (flog) {
                handler.sendEmptyMessage(num++);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }.start();
    flog = true;
}
private void method_3() {
    //Timer一旦被cancel之后就废了,只有重新构造一个。
    if (flog == true) {
        timer = new Timer();
        timerTask = new TimerTask() {
            @Override
            public void run() {
                handler.sendEmptyMessage(num++);
            }
        };
        /**
         * 第一个参数:任务
         * 第二个参数:初始启动等待时间
         * 第三个参数:时间间隔
         */
        timer.schedule(timerTask, 0, 1000);
    } else {
        timer.cancel();
        // 一定设置为null,否则定时器不会被回收
        timer = null;
        flog = true;
    }
}
private void method_4() {
    new Thread() {
        @Override
        public void run() {
            super.run();
            handlerTimer.sendEmptyMessage(num++);
        }
    }.start();
}
private void method_5() {//Observable.interval
    stopTimer();
    // 每隔500毫秒执行一次逻辑代码
    disposable = Observable.interval(1000, TimeUnit.MILLISECONDS)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<Long>() {
                @Override
                public void accept(@io.reactivex.annotations.NonNull Long aLong) throws Exception {
                    // 逻辑代码
                    showTime.setText("点击我停止计时: " + num++);
                }
            }, new Consumer<Throwable>() {
                @Override
                public void accept(@io.reactivex.annotations.NonNull Throwable throwable) throws Exception {
                    throwable.printStackTrace();
                }
            });
}
@Override
public void onBackPressed() {//便于对此方法的低啊用
    super.onBackPressed();//activity切换动画
    overridePendingTransition(R.anim.fade_left_in,R.anim.fade_right_out);
}
/**
 * 停止定时执行
 */
protected void stopTimer() {
    if (null != disposable) {
        disposable.dispose();
        disposable = null;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值