商城搶購倒計時的幾種實現(xiàn)

方法一
Timer與TimerTask(Java實現(xiàn))


public class timerTask extends Activity{

private int recLen = 11;

private TextView txtView;

Timer timer = new Timer();

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.timertask);

txtView = (TextView)findViewById(R.id.txttime);

timer.schedule(task, 1000, 1000);      // timeTask

}

TimerTask task = new TimerTask() {

@Override

public void run() {

runOnUiThread(new Runnable() {      // UI thread

@Override

public void run() {

recLen--;

txtView.setText(""+recLen);

if(recLen < 0){

timer.cancel();

txtView.setVisibility(View.GONE);

}

}

});

}

};

}

方法二

TimerTask與Handler(不用Timer的改進型)


public class timerTask extends Activity{

private int recLen = 11;

private TextView txtView;

Timer timer = new Timer();

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.timertask);

txtView = (TextView)findViewById(R.id.txttime);

timer.schedule(task, 1000, 1000);      // timeTask

}

final Handler handler = new Handler(){

@Override

public void handleMessage(Message msg){

switch (msg.what) {

case 1:

txtView.setText(""+recLen);

if(recLen < 0){

timer.cancel();

txtView.setVisibility(View.GONE);

}

}

}

};

TimerTask task = new TimerTask() {

@Override

public void run() {

recLen--;

Message message = new Message();

message.what = 1;

handler.sendMessage(message);

}

};

}

方法三

Handler與Message(不用TimerTask)


public class timerTask extends Activity{

private int recLen = 11;

private TextView txtView;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.timertask);

txtView = (TextView)findViewById(R.id.txttime);

Message message = handler.obtainMessage(1);    // Message

handler.sendMessageDelayed(message, 1000);

}

final Handler handler = new Handler(){

public void handleMessage(Message msg){        // handle message

switch (msg.what) {

case 1:

recLen--;

txtView.setText("" + recLen);

if(recLen > 0){

Message message = handler.obtainMessage(1);

handler.sendMessageDelayed(message, 1000);      // send message

}else{

txtView.setVisibility(View.GONE);

}

}

super.handleMessage(msg);

}

};

}

方法四

Handler與Thread(不占用UI線程)


public class timerTask extends Activity{

private int recLen = 0;

private TextView txtView;

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.timertask);

txtView = (TextView)findViewById(R.id.txttime);

new Thread(new MyThread()).start();        // start thread

}

final Handler handler = new Handler(){          // handle

public void handleMessage(Message msg){

switch (msg.what) {

case 1:

recLen++;

txtView.setText("" + recLen);

}

super.handleMessage(msg);

}

};

public class MyThread implements Runnable{      // thread

@Override

public void run(){

while(true){

try{

Thread.sleep(1000);    // sleep 1000ms

Message message = new Message();

message.what = 1;

handler.sendMessage(message);

}catch (Exception e) {

}

方法五

Handler與Runnable(最簡單型)


public class timerTask extends Activity{

private int recLen = 0;

private TextView txtView;

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.timertask);

txtView = (TextView)findViewById(R.id.txttime);

handler.postDelayed(runnable, 1000);

}

Handler handler = new Handler();

Runnable runnable = new Runnable() {

@Override

public void run() {

recLen++;

txtView.setText("" + recLen);

handler.postDelayed(this, 1000);

}

};

}

計時與倒計時

方法1,方法2和方法3,都是倒計時

方法4嗜闻,方法5卵洗,都是計時

計時和倒計時,都可使用上述方法實現(xiàn)(代碼稍加改動)

UI線程比較

方法1,方法2和方法3,都是在UI線程實現(xiàn)的計時;

方法4和方法5物独,是另開Runnable線程實現(xiàn)計時

實現(xiàn)方式比較

方法1,采用的是Java實現(xiàn)氯葬,即Timer和TimerTask方式挡篓;

其它四種方法,都采用了Handler消息處理

推薦使用

如果對UI線程交互要求不很高,可以選擇方法2和方法3

如果考慮到UI線程阻塞官研,嚴重影響到用戶體驗秽澳,推薦使用方法4,另起線程單獨用于計時和其它的邏輯處理

方法5戏羽,綜合了前幾種方法的優(yōu)點担神,是最簡的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市始花,隨后出現(xiàn)的幾起案子妄讯,更是在濱河造成了極大的恐慌,老刑警劉巖酷宵,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亥贸,死亡現(xiàn)場離奇詭異,居然都是意外死亡浇垦,警方通過查閱死者的電腦和手機炕置,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來男韧,“玉大人朴摊,你說我怎么就攤上這事〈寺牵” “怎么了仍劈?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寡壮。 經(jīng)常有香客問我,道長讹弯,這世上最難降的妖魔是什么况既? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮组民,結(jié)果婚禮上棒仍,老公的妹妹穿的比我還像新娘。我一直安慰自己臭胜,他們只是感情好莫其,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耸三,像睡著了一般乱陡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仪壮,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天憨颠,我揣著相機與錄音,去河邊找鬼。 笑死爽彤,一個胖子當著我的面吹牛养盗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播适篙,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼往核,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嚷节?” 一聲冷哼從身側(cè)響起聂儒,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丹喻,沒想到半個月后薄货,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡碍论,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年谅猾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鳍悠。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡税娜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出藏研,到底是詐尸還是另有隱情敬矩,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布蠢挡,位于F島的核電站弧岳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏业踏。R本人自食惡果不足惜禽炬,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望勤家。 院中可真熱鬧腹尖,春花似錦、人聲如沸伐脖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讼庇。三九已至绎巨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蠕啄,已是汗流浹背认烁。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人却嗡。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓舶沛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親窗价。 傳聞我的和親對象是個殘疾皇子如庭,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容