最近在项目开发过程中,由于需要设计一个计时器的功能。所以在这里分享一个TimeUtils.可以实现 暂停/继续 的计时器;
话不多说,先看一下TimeUtils这个工具类;
package cn.com.hbtv.testtimer; import android.os.Handler; import android.os.Message; import android.text.format.DateFormat; import android.util.Log; import android.widget.TextView; import java.util.Timer; import java.util.TimerTask; /** * Created by Administrator on 2017/8/17. */ public class Timeutils { private static String TAG = "<<<"; private Timer mTimer = null; private TimerTask mTimerTask = null; private Handler mHandler = null; private static long count = 0; private boolean isPause = false; private static int delay = 1000; //1s private static int period = 1000; //1s private static final int UPDATE_TEXTVIEW = 0; TextView mTextView; public Timeutils(TextView mTextView){ this.mTextView=mTextView; mHandler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case UPDATE_TEXTVIEW: updateTextView(); break; default: break; } } }; } public void puseTimer(){ isPause = !isPause; } private void updateTextView(){ int i = 1000; long time= count * i; CharSequence sysTimeStr = DateFormat.format("mm:ss", time); mTextView.setText(String.valueOf(sysTimeStr)); } public void startTimer(){ if (mTimer == null) { mTimer = new Timer(); } if (mTimerTask == null) { mTimerTask = new TimerTask() { @Override public void run() { Log.i(TAG, "count: "+String.valueOf(count)); sendMessage(UPDATE_TEXTVIEW); do { try { Log.i(TAG, "sleep(1000)..."); Thread.sleep(1000); } catch (InterruptedException e) { } } while (isPause); count ++; } }; } if(mTimer != null && mTimerTask != null ) mTimer.schedule(mTimerTask, delay, period); } public void stopTimer(){ if (mTimer != null) { mTimer.cancel(); mTimer = null; } if (mTimerTask != null) { mTimerTask.cancel(); mTimerTask = null; } count = 0; } public void sendMessage(int id){ if (mHandler != null) { Message message = Message.obtain(mHandler, id); mHandler.sendMessage(message); } } }
做一下简单的说明,由于你要让你的计时器每一秒中就要进行更行,所以这里需要用到子线程来进行UI的更新;用dowwhile来控制线程的暂停和继续;
public class MainActivity extends AppCompatActivity { private static String TAG = "<<<"; private TextView mTextView = null; private Button mButton_start = null; private Button mButton_pause = null; private Button mButton_stop = null; Timeutils timeutils; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = (TextView)findViewById(R.id.mytextview); mButton_start = (Button)findViewById(R.id.mybutton_start); mButton_pause = (Button)findViewById(R.id.mybutton_pause); mButton_stop = (Button)findViewById(R.id.mybutton_stop); timeutils=new Timeutils(mTextView); mButton_start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { timeutils.startTimer(); } }); mButton_pause.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { timeutils.puseTimer(); } }); mButton_stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { timeutils.stopTimer(); } }); } }
调用就不多说了;就这么简单实用;
Demo下载:
http://download.csdn.net/download/weixin_39537009/9938742