android 倒计时翻牌子,Android实现计时与倒计时(限时抢购)的几种方法

Android实现计时与倒计时(限时抢购)的几种方法

(2012-08-18 12:27:30)

标签:

杂谈

在最近的一个安卓客户端项目中恰好遇到了类似的问题,一开始使用的是Timer与 TimerTask,

虽然此方法通用,但后来考虑在安卓中是否有更佳的方案,于是乎共找到以下五种实现方案,最终我使用了方案五完成了此功能.

方法一

Timer与TimerTask(Java实现)

01 public class timerTask extends Activity{

02

03 private int recLen = 11;

04 private TextView txtView;

05 Timer timer = new Timer();

06

07 public void onCreate(Bundle savedInstanceState){

08 super.onCreate(savedInstanceState);

09

10 setContentView(R.layout.timertask);

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

12

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

14 }

15

16 TimerTask task = new TimerTask() {

17 @Override

18 public void run() {

19

20 runOnUiThread(new Runnable() { // UI thread

21 @Override

22 public void run() {

23 recLen--;

24 txtView.setText(""+recLen);

25 if(recLen < 0){

26 timer.cancel();

27 txtView.setVisibility(View.GONE);

28 }

29 }

30 });

31 }

32 };

33 }

方法二

TimerTask与Handler(不用Timer的改进型)

01 public class timerTask extends Activity{

02 private int recLen = 11;

03 private TextView txtView;

04 Timer timer = new Timer();

05

06 public void onCreate(Bundle savedInstanceState){

07 super.onCreate(savedInstanceState);

08

09 setContentView(R.layout.timertask);

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

11

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

13 }

14

15 final Handler handler = new Handler(){

16 @Override

17 public void handleMessage(Message msg){

18 switch (msg.what) {

19 case 1:

20 txtView.setText(""+recLen);

21 if(recLen < 0){

22 timer.cancel();

23 txtView.setVisibility(View.GONE);

24 }

25 }

26 }

27 };

28

29 TimerTask task = new TimerTask() {

30 @Override

31 public void run() {

32 recLen--;

33 Message message = new Message();

34 message.what = 1;

35 handler.sendMessage(message);

36 }

37 };

38 }

方法三

01 Handler与Message(不用TimerTask)

02

03 public class timerTask extends Activity{

04 private int recLen = 11;

05 private TextView txtView;

06

07 public void onCreate(Bundle savedInstanceState) {

08 super.onCreate(savedInstanceState);

09

10 setContentView(R.layout.timertask);

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

12

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

14 handler.sendMessageDelayed(message, 1000);

15 }

16

17 final Handler handler = new Handler(){

18

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

20 switch (msg.what) {

21 case 1:

22 recLen--;

23 txtView.setText("" + recLen);

24

25 if(recLen > 0){

26 Message message = handler.obtainMessage(1);

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

28 }else{

29 txtView.setVisibility(View.GONE);

30 }

31 }

32

33 super.handleMessage(msg);

34 }

35 };

36 }

方法四

Handler与Thread(不占用UI线程)

01 public class timerTask extends Activity{

02 private int recLen = 0;

03 private TextView txtView;

04

05 public void onCreate(Bundle savedInstanceState){

06 super.onCreate(savedInstanceState);

07

08 setContentView(R.layout.timertask);

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

10

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

12 }

13

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

15 public void handleMessage(Message msg){

16 switch (msg.what) {

17 case 1:

18 recLen++;

19 txtView.setText("" + recLen);

20 }

21 super.handleMessage(msg);

22 }

23 };

24

25 public class MyThread implements Runnable{ // thread

26 @Override

27 public void run(){

28 while(true){

29 try{

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

31 Message message = new Message();

32 message.what = 1;

33 handler.sendMessage(message);

34 }catch (Exception e) {

35 }

方法五

01 Handler与Runnable(最简单型)

02

03 public class timerTask extends Activity{

04 private int recLen = 0;

05 private TextView txtView;

06

07 public void onCreate(Bundle savedInstanceState){

08 super.onCreate(savedInstanceState);

09

10 setContentView(R.layout.timertask);

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

12

13 handler.postDelayed(runnable, 1000);

14 }

15

16 Handler handler = new Handler();

17 Runnable runnable = new Runnable() {

18 @Override

19 public void run() {

20 recLen++;

21 txtView.setText("" + recLen);

22 handler.postDelayed(this, 1000);

23 }

24 };

25 }

计时与倒计时

方法1,方法2和方法3,都是倒计时

方法4,方法5,都是计时

计时和倒计时,都可使用上述方法实现(代码稍加改动)

UI线程比较

方法1,方法2和方法3,都是在UI线程实现的计时;

方法4和方法5,是另开Runnable线程实现计时

实现方式比较

方法1,采用的是Java实现,即Timer和TimerTask方式;

其它四种方法,都采用了Handler消息处理

推荐使用

如果对UI线程交互要求不很高,可以选择方法2和方法3

如果考虑到UI线程阻塞,严重影响到用户体验,推荐使用方法4,另起线程单独用于计时和其它的逻辑处理

方法5,综合了前几种方法的优点,是最简的

转自:http://blog.csdn.net/t12x3456/article/details/7816500

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值