今天给大家介绍几个Android中实现计时和倒计时的几种方法,这几种方法也许今后会帮上大家,现贴出来如下:
方法一
Timer与TimerTask(Java实现)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
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的改进型)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
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线程)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
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(最简单型)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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,都是计时
计时和倒计时,都可使用上述方法实现(代码稍加改动)
UI线程比较
方法1,方法2和方法3,都是在UI线程实现的计时;
方法4和方法5,是另开Runnable线程实现计时
实现方式比较
方法1,采用的是Java实现,即Timer和TimerTask方式;
其它四种方法,都采用了Handler消息处理
http://www.itivy.com/android/archive/2011/10/25/some-method-android-timer.html