Android中使用定時(shí)器的三種方法
本文實(shí)例為大家分享了Android中使用定時(shí)器的三種方法,供大家參考,具體內(nèi)容如下
圖示:
因?yàn)槎急容^簡(jiǎn)單,所以就直接貼代碼(慮去再次點(diǎn)擊停止的操作),有個(gè)全局的Handler負(fù)責(zé)接收消息更新UI
第一種方法:Thread.sleep();方法
Runnable runnable = new Runnable() { @Override public void run() { while (true) { mHandler.sendEmptyMessage(0); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }; new Thread(runnable).start(); }
第二種方法:Handler的postDelay()方法
final Runnable runnable = new Runnable() { @Override public void run() { if (isStart2) { mHandler.sendEmptyMessage(0); mHandler.postDelayed(this, 1000); } } }; mHandler.postDelayed(runnable, 1000); }
第三種:Timer和TimerTask
private Timer timer = new Timer(); private TimerTask timerTask = new TimerTask() { @Override public void run() { mHandler.sendEmptyMessage(0); } }; timer.schedule(timerTask, 1000, 1000);
總的來說第三種方法最方便,不易出錯(cuò),第二種容易忘記添加出發(fā)事件.
貼一下完整代碼:
布局文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.brioal.timertest.MainActivity"> <TextView android:id="@+id/main_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="100dp" android:text="Hello World!" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/main_tv" android:layout_marginTop="100dp" android:gravity="center" android:orientation="vertical"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:onClick="Method1" android:text="方法1:Thread" android:textAllCaps="false" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:onClick="Method2" android:text="方法2:Handler" android:textAllCaps="false" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:onClick="Method3" android:text="方法3:Task" android:textAllCaps="false" /> </LinearLayout> </RelativeLayout>
MainActivity
package com.brioal.timertest; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TextView; import java.text.SimpleDateFormat; import java.util.Timer; import java.util.TimerTask; public class MainActivity extends AppCompatActivity { private TextView mTv; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); //收到消息后顯示當(dāng)前時(shí)間 long current = System.currentTimeMillis(); SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); String time = dateFormat.format(current); mTv.setText(time); } }; private Timer timer = new Timer(); private TimerTask timerTask = new TimerTask() { @Override public void run() { mHandler.sendEmptyMessage(0); } }; private Thread thread1; private boolean isStart1 = false; private boolean isStart2 = false; private boolean isStart3 = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTv = (TextView) findViewById(R.id.main_tv); } //Thread方法 public void Method1(View view) { Runnable runnable = new Runnable() { @Override public void run() { while (isStart1) { mHandler.sendEmptyMessage(0); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }; if (isStart1) { isStart1 = false; } else { isStart1 = true; thread1 = new Thread(runnable); thread1.start(); } } public void Method2(View view) { final Runnable runnable = new Runnable() { @Override public void run() { if (isStart2) { mHandler.sendEmptyMessage(0); mHandler.postDelayed(this, 1000); } } }; if (isStart2) { isStart2 = false; } else { mHandler.postDelayed(runnable, 1000); isStart2 = true; } } public void Method3(View view) { if (isStart3) { timer.cancel(); isStart3 = false; } else { timer.schedule(timerTask, 1000, 1000); isStart3 = true; } } }
總結(jié)完了,完整Github地址:TimerTest
更多內(nèi)容請(qǐng)點(diǎn)擊專題《java定時(shí)功能》進(jìn)行學(xué)習(xí)。
以上就是定時(shí)器使用方法的全部?jī)?nèi)容,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Android使用Handler實(shí)現(xiàn)定時(shí)器與倒計(jì)時(shí)器功能
- Android定時(shí)器和倒計(jì)時(shí)實(shí)現(xiàn)淘寶秒殺功能
- 詳解Android實(shí)現(xiàn)定時(shí)器的幾種方法
- Android 定時(shí)器實(shí)現(xiàn)圖片的變換
- Android定時(shí)器Timer的停止和重啟實(shí)現(xiàn)代碼
- Android實(shí)現(xiàn)定時(shí)器的五種方法實(shí)例詳解
- Android 實(shí)現(xiàn)定時(shí)器的四種方式總結(jié)及實(shí)現(xiàn)實(shí)例
- Android定時(shí)器實(shí)現(xiàn)的幾種方式整理及removeCallbacks失效問題解決
- 基于Android中實(shí)現(xiàn)定時(shí)器的3種解決方法
- Android定時(shí)器實(shí)現(xiàn)定時(shí)執(zhí)行、重復(fù)執(zhí)行、定時(shí)重復(fù)執(zhí)行、定次數(shù)執(zhí)行的多種方式
相關(guān)文章
Android中使用TextView實(shí)現(xiàn)圖文混排的方法
向TextView或EditText中添加圖像比直接添加文本復(fù)雜一點(diǎn)點(diǎn),需要用到<img>標(biāo)簽。接下來通過本文給大家介紹Android中使用TextView實(shí)現(xiàn)圖文混排的方法,希望對(duì)大家有所幫助2016-02-02Android多進(jìn)程間采用AIDL方式進(jìn)行通信
這篇文章主要為大家詳細(xì)介紹了Android多進(jìn)程間采用AIDL方式進(jìn)行通信,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04Dagger2 Android依賴注入學(xué)習(xí)筆記
這篇文章主要介紹了Dagger2 Android依賴注入學(xué)習(xí)筆記,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06Android開發(fā)之圖形圖像與動(dòng)畫(三)Animation效果的XML實(shí)現(xiàn)
使用XML來定義Tween Animation動(dòng)畫的XML文件在工程中res/anim目錄,這個(gè)文件必須包含一個(gè)根元素,感興趣的友可以了解一下,希望本文對(duì)你有所幫助2013-01-01Android ListView構(gòu)建支持單選和多選的投票項(xiàng)目
如何在Android的ListView中構(gòu)建CheckBox和RadioButton列表?這篇文章主要為大家詳細(xì)介紹了Android ListView實(shí)現(xiàn)支持單選和多選的投票項(xiàng)目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01Android6.0來電號(hào)碼與電話薄聯(lián)系人進(jìn)行匹配
這篇文章主要為大家詳細(xì)介紹了Android6.0來電號(hào)碼與電話薄聯(lián)系人進(jìn)行匹配的方法,感興趣的小伙伴們可以參考一下2016-07-07Android使用ViewDragHelper實(shí)現(xiàn)仿QQ6.0側(cè)滑界面(一)
這篇文章主要介紹了Android使用ViewDragHelper實(shí)現(xiàn)仿QQ6.0側(cè)滑界面(一)的相關(guān)資料,需要的朋友可以參考下2016-02-02