国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android中使用定時(shí)器的三種方法

2019-12-12 06:20:27
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(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);

總的來(lái)說(shuō)第三種方法最方便,不易出錯(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è)參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黑龙江省| 大英县| 通许县| 黔东| 临猗县| 武鸣县| 昂仁县| 盐津县| 五寨县| 克拉玛依市| 尚志市| 盖州市| 巴彦县| 泸西县| 宣汉县| 安仁县| 利辛县| 邯郸县| 绥阳县| 修武县| 于都县| 华亭县| 龙江县| 金坛市| 黔江区| 平凉市| 正安县| 织金县| 开封市| 庄浪县| 唐河县| 张家口市| 太湖县| 嘉兴市| 抚顺县| 财经| 孟连| 隆尧县| 深水埗区| 于都县| 永修县|