Java/Android倒計時(開始,暫停,恢復,停止)
由於要做暫停和恢復,這裡我就沒有使用Android的CountDownTimer,而是用了Java的Timer。所以,這個方法在java肯定是通用。我也外加了Android獨有的Service,有些計時器需要在Activiy關閉的情況下依然在計時,回到Activity時,顯示當前的計時狀態。
Timer 這個Java的類,具體看Java的API說明,但是要注意一點:
Timer 在cancel後,需要重新new 一次。
首先要給計時器定義三個狀態:準備,開始,暫停。
public static final int PREPARE = 0; public static final int START = 1; public static final int PASUSE = 2;
1.準備:沒有開始計時,最初始狀態;
2.開始:已經開始倒計時
3.暫停:已經開始倒計時,而且使用者點選了暫停
開始、恢復倒計時,我定義了這個方法:
/**
* start count down
*/
private void startTimer(){
timer = new Timer();
timerTask = new MyTimerTask();
timer.scheduleAtFixedRate(timerTask, 0, timer_unit);
}
timer_unit 就是執行timer 任務的時間,我定義為1秒。MyTimerTask是我定義的一個倒計時計算方法,如下:
timer_couting 是一個變數,記錄當前倒計時還剩餘多少時間,當剩餘時間為0時,倒計時結束,所以cancel結束倒計時。每次倒計一秒通過handler傳送到主執行緒來更新ui提示倒計時資訊。/** * count down task */ private class MyTimerTask extends TimerTask{ @Override public void run() { timer_couting -=timer_unit; if(timer_couting==0){ cancel(); initTimerStatus(); } mHandler.sendEmptyMessage(1); } }
在介面上定義兩個按鈕,一個開始,一個停止,開始後可以暫停,暫停後可以恢復。
case R.id.btn_start:
switch (timerStatus){
case CountDownTimerUtil.PREPARE:
startTimer();
timerStatus = CountDownTimerUtil.START;
btnStart.setText("PAUSE");
break;
case CountDownTimerUtil.START:
timer.cancel();
timerStatus = CountDownTimerUtil.PASUSE;
btnStart.setText("RESUME");
break;
case CountDownTimerUtil.PASUSE:
startTimer();
timerStatus = CountDownTimerUtil.START;
btnStart.setText("PAUSE");
break;
}
break;
case R.id.btn_stop:
if(timer!=null){
timer.cancel();
initTimerStatus();
mHandler.sendEmptyMessage(1);
}
對於Android應用中需要用到關閉了Activity後依然在計時,在這裡我們需要用Service,定義Service的情況跟上面類同,但是要注意的是這個計時Service是要單例模式,保證每次倒計時進來都是同一個倒計時。還需要定義一些方法來讓Activity給這個Service傳遞操作命令,開始,暫停,恢復,停止。
/**
* start
*/
public void startCountDown(){
startTimer();
timerStatus = CountDownTimerUtil.START;
}
/**
* paust
*/
public void pauseCountDown(){
timer.cancel();
timerStatus = CountDownTimerUtil.PASUSE;
}
/**
* stop
*/
public void stopCountDown(){
if(timer!=null){
timer.cancel();
initTimerStatus();
mCountDownTimerListener.onChange();
}
}
在Activity裡面獲取這個Service
countDownTimerService = CountDownTimerService.getInstance(new MyCountDownLisener()
,service_distination_total);
專案原始碼:https://github.com/arjinmc/Android-CountDownTimer
相關推薦
Java/Android倒計時(開始,暫停,恢復,停止)
由於要做暫停和恢復,這裡我就沒有使用Android的CountDownTimer,而是用了Java的Timer。所以,這個方法在java肯定是通用。我也外加了Android獨有的Service,有些計時器需要在Activiy關閉的情況下依然在計時,回到Activity時,顯
JAVA多執行緒機制之暫停、恢復和停止
在JDK1.2以前的版本如果要實現執行緒的暫停、恢復和停止的方法分別是suspend()、resume()、stop()。但是從JDK1.2以後這些方法已經被遺棄,因為它們有可能造成嚴重的系統錯誤和異常。 首先suspend()方法不會釋放執行緒所佔用的資源。
Appium+java+android一(搭建appium環境,Android環境,java環境)
Appium+java+android自動化測試 環境搭建 一.JDK下載安裝及環境變數配置 進入下面的連結找到與你的電腦系統相對應得jdk版本,點選下載 jdk下載地址 安裝JDK 選擇安裝目錄 安裝過程中會出現兩次 安裝提示 。第一次是安裝 jdk ,第二次是安
java android 讀寫西門子PLC數據,包含S7協議和Fetch/Write協議,s7支持200smart,300PLC,1200PLC,1500PLC
操作 [1] sim mmu 時間 多線程同步 ont 量化 訪問 本文將使用一個gitHub開源的組件技術來讀寫西門子plc數據,使用的是基於以太網的TCP/IP實現,不需要額外的組件,讀取操作只要放到後臺線程就不會卡死線程,本組件支持超級方便的高性能讀寫操作 githu
java小練習(控制檯輸出猜一個數,有猜大猜小提示 )
/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱:
Java 8 Lambda(類庫篇——Streams API,Collector和並行)
參考資料:1、背景自從lambda表示式成為Java語言的一部分之後,Java集合(Collections)API就面臨著大幅變化。為了不推到重來,所以對現有的API進行改進。為現有的介面(例如Collection,List和Stream)增加擴充套件方法;在類庫中增加新的流
多執行緒——(一):暫停、恢復、停止執行緒較好的方式,sleep/wait/yield區別
不推薦的 大家都知道:suspend()、resume()、stop()這些方法已經被廢棄了。suspend()、resume()如果使用不當,容易造成公共的同步物件資源的獨佔以及導致資料不同步。用官網的話說: This method has
Java Socket程式設計(非阻塞多執行緒,NIO)
服務端:伺服器Server類public class Server implements Runnable { private int port; private volatile boolean stop; private Selector sele
深入理解Java 8 Lambda(類庫篇——Streams API,Collectors和並行)
作者:Lucida 微博:@peng_gong 本文謝絕轉載,如需轉載需徵得作者本人同意,謝謝。 本文是深入理解Java 8 Lambda系列的第二篇,主要介紹Java 8針對新增語言特性而新增的類庫(例如Streams API、Collectors和並行)。 關於 Java SE 8增加了新的語言
Java 實現倒計時(由秒計算天、小時、分鐘、秒)
有時候會要求實現這樣一個需求: 天、小時、分鐘、秒的數值都是隔開的,伺服器端只返回一個時間戳長度。 以下就是我的實現方案,力求減少物件生成、減小計算量: import java.util.Timer; import java.util.TimerTask; publi
在spring中實現quartz2.2.1的動態排程(開始、暫停、停止等)
需求: 需要在頁面設定某個時間,然後點選按鈕後,執行某個排程,並且可以在頁面刪除某個排程 1、導包 <dependency> <groupId>org.quartz-scheduler</groupId&
在spring中實現quartz的動態排程(開始、暫停、停止等)
需求: 需要在頁面設定某個時間,然後點選按鈕後,執行某個排程,並且可以在頁面刪除某個排程 1、導包 <dependency> <groupId>org.quartz-scheduler</groupId> <
禁止了鼠標或者是手指滑動的默認事件,後期需要恢復,該怎麽做呢
b- class 今天 針對性 網頁 doc bind block prev 做前端開發,需要根據不同時期的需求做針對性的處理,特別是Javascript中的事件處理,如果剛開始禁止了鼠標或者是手指滑動的默認事件,後期需要恢復,該怎麽做呢?我今天做了下測試,沒什麽問題!
Java Number類(數據類型的包裝類)
spa byte unbox pre mask 編譯 http ati 類型 Java Number 一般地,當需要使用數字的時候,我們通常使用內置數據類型,如:byte、int、long、double等。 例如: int i = 5000; floa
java實現四則運算(陳浩安&郭曉航)
不能 乘除 img 編寫 同事 spec 充足 找到 設計文檔 github項目地址:https://github.com/wzl666A/myApp-master 一、項目簡介 實現一個自動生成小學四則運算題目的命令行程序 二、項目實現情況 1. 使用 -n 參數控制生成
Java學習日常(page指令 跳轉指令 包含指令)
學習內容 Page指令 ContentType 和 pageEncoding <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
java基礎 · 例項(介面抽象類多型的結合)
package v1; interface Animal{ void shout(); //介面中只宣告方法 void breatch(); void name(); } abstract class abstractclaaa implements
Java——String類(總結的也是超級詳細了)
一、String類-Java.long.String 1.1 String類的兩種例項化方式 a . 直接賦值,在堆上分配空間。 String str = "hello"; b . 傳統方法。通過構造方法例項化String類物件 String str1 = new St
Java學習流程圖(學習路線、書籍、教程推薦)
吸引 第2版 upload 圖片 linu 分布式架構 重構 相關 基礎 Java的火爆襲來,吸引了大批的初學者涉獵,想入行Java,卻苦於自己沒有基礎,擔心學不好。我告訴你,這些擔心都是浮雲,你只是懼怕走進一個新天地,人都是一樣的,面對自己不熟悉的領域總會有莫名的恐懼感。
JAVA程式設計基礎——(抽象類、密封類和介面)
一、抽象類 (一)抽象類:包含抽象方法的類稱為抽象類。 抽象類也要被abstract修飾,抽象類中可以有非抽象方法,抽象類不能建立例項物件。 abstract class Animal { public abstract void bark();//抽象方法 pub