android使用timer和timertask实现计时器

too simple to show u my code directly
效果:第一个activity,oncreate中启动计时器,当activity不可见时暂停计时器,可见时再继续计时器,跳到第二个activity时显示当前所用时间,并暂停计时器,返回第一个activity时启动计时器。
(注意:在oncreat()中启动计时器,在onpause()中暂停,在onrestart()中启动继续记时。)
第一个activity代码:

package com.febmaple.testtimer;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private TextView tvTime;
    private MainPresenter presenter;
    private String recordTime;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvTime = (TextView) findViewById(R.id.tv_time);
        presenter = new MainPresenter(this);
        presenter.startTimerFrom0();

    }

    public void showTime(String time) {
        tvTime.setText(time);
        recordTime = time;

    }

//    public void startFromPause(View view) {
//        presenter.startTimerFromPause();
//    }
//
//    public void stop(View view) {
//        presenter.stopTimer();
//    }


    @Override
    protected void onRestart() {
        super.onRestart();
        presenter.startTimerFromPause();
    }

//    @Override
//    protected void onStop() {
//        super.onStop();
//        presenter.stopTimer();
//    }

    @Override
    protected void onPause() {
        super.onPause();
        presenter.stopTimer();
    }

    public void nextActivity(View view) {
        startActivity(SecAvtivity.newIntent(MainActivity.this, recordTime));
    }
}

第一个activity的presenter的代码

package com.febmaple.testtimer;

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

/**
 * 作者: FebMaple on 7/4/2017.
 * 邮箱: febmaple219@gmail.com
 * 版权: FebMaple
 * ====================================================
 */

public class MainPresenter {
    private MainActivity act;

    public MainPresenter(MainActivity act) {
        this.act = act;
    }

    /**
     * 计时
     */
    private TimerTask timerTask;
    private Timer timer = new Timer();
    private int cntIng = 0;

    //从0开始记时
    public void startTimerFrom0() {
        timerTask = new TimerTask() {
            int cntStart = 0;

            @Override
            public void run() {
                act.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        String time = getStringTime(cntStart++);
                        cntIng = cntStart;
                        act.showTime(time);
                    }
                });
            }
        };
        timer.schedule(timerTask, 0, 1000);//每隔一秒执行一次task中的任务。
    }

    //暂停后开始记时
    public void startTimerFromPause() {
        timerTask = new TimerTask() {
            @Override
            public void run() {
                act.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        String time = getStringTime(cntIng++);
                        act.showTime(time);
                    }
                });
            }
        };
        timer.schedule(timerTask, 0, 1000);
    }

    //停止记时
    public void stopTimer() {
        if (!timerTask.cancel()) {
            timerTask.cancel();
            timer.cancel();
        }
    }

    private String getStringTime(int cnt) {
        int hour = cnt / 3600;
        int min = cnt % 3600 / 60;
        int second = cnt % 60;
        return String.format(Locale.CHINA, "%02d:%02d:%02d", hour, min, second);
    }

}

第二个activity代码

package com.febmaple.testtimer;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

/**
 * 作者: FebMaple on 7/4/2017.
 * 邮箱: febmaple219@gmail.com
 * 版权: FebMaple
 * ====================================================
 */

public class SecAvtivity extends Activity {
    private TextView tvAimTime;
    private static final String RECORD_TIME = "RECORD_TIME";

    public static Intent newIntent(Context context, String recordTime) {
        Intent intent = new Intent();
        intent.setClass(context, SecAvtivity.class);
        intent.putExtra(RECORD_TIME, recordTime);
        return intent;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sec);
        tvAimTime = (TextView) findViewById(R.id.tv_time);
        String usedTime = getIntent().getStringExtra(RECORD_TIME);
        tvAimTime.setText(usedTime);

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值