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);
}
}