您的位置:首页 > 移动开发 > Android开发

android使用timer和timertask实现计时器

2017-04-07 15:11 393 查看
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);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: