public void run() {
// TODO Auto-generated method stub
//要做的事情,这里再次调用此Runnable对象,以实现每两秒实现一次的定时器操作
handler.postDelayed(this, 2000);
3,使用PostDelayed方法,两秒后调用此Runnable对象
handler.postDelayed(runnable, 2000);
实际上也就实现了一个2s的一个定时器
4,如果想要关闭此定时器,可以这样操作
handler.removeCallbacks(runnable);
当然,你也可以做一个闹钟提醒延时的函数试试,比如,先用MediaPlayer播放闹钟声音,
如果不想起,被停止播放之后,下次就5分钟后再播放,再被停止的话,下次就4分钟后播放,
………………
只要更改延时的时间就可以实现了,用一个static对象的话会比较容易操作。
全手打原创哦,百度能告诉你的我就不告诉你了。
这是一种可以创建多线程消息的函数使用方法:1,首先创建一个Handler对象Handler handler=new Handler();2,然后创建一个Runnable对象Runnable runnable=new Runnable(){ @Override public void run() { // TODO Auto-generated method stub
在
Android
开发
中
,定时器一般有以下3种实现
方法
:
一、采用Handler与线程的sleep(long)
方法
二、采用Handler的
post
Delay
ed
(Runnable, long)
方法
三、采用Handler与timer及TimerTask结合的
方法
下面逐一介绍:
一、采用Handle与线程的sleep(long)
方法
Handler主要用来处理接受到的消息。这只是最主要的
方法
,当然Handler里还有其他的
方法
供实现,有兴趣的可以去查API,这里不过多解释。
1. 定义一个Handler类,用于处理接受到的Message。
Handler handler = new Han
在
Android
开发
中
,定时器一般有以下3种实现
方法
:1.采用Handle与线程的sleep(long)
方法
;
2.采用Handler的
post
Delay
ed
(Runnable, long)
方法
;
3.采用Handler与timer及TimerTask结合的
方法
.
我们知道在
Android
开发
中
不能在非ui线程
中
更新ui,但是,有的时候我们需要在代码
中
执行一些诸如访问网络、查询数据库等耗时操作,为了不阻塞ui线程,我们时常会开启一个新的线程(工作线程)来执行这些耗时操作,然后我们可能需要将查询到的数据渲染到ui组件上,那么这个时候我们就需要考虑异步更新ui的问题了。
android
中
有下列几种异步更新ui的解决办法:
Activity.runOnUiThread(Runnable)
View.
post
(Runnable)
long) View.
post
Delay
ed
(Runnable, long)
使用handler(线程间通讯)
Memory safer implementation of
android
.os.Handler
Problem
Original implementation of Handler always keeps hard reference to handler in queue of execution.
Any object in Message or Runnable
post
ed
to
android
.os.Handler will be hard referenc
ed
for some time.
If you create anonymous Runnable and call to
post
Delay
ed
with large timeout, that Runnable will be held
in memory until timeout passes. Even if your Runnable seems small, it indirectly references owner class,
which is us
post
Delay
的调用过程
public final boolean
post
Delay
ed
(@NonNull Runnable r, long
delay
Millis) {
return sendMessag
eD
elay
ed
(get
Post
Messag
今天做项目看到这段代码时产生了一些疑惑,又打开 Handler 源码看了看相关的逻辑。简短的几行代码背后却有着复杂的逻辑。真是越看越爽啊!!!
new Handler().
post
Delay
ed
(new Runnable() {
@Override
public void run() {
// do something
},2000);
handler...
大部分同学在回答Handler的原理的时候都能回答出Handler将消息丢到MessageQueue
中
,然后Looper.loop死循环不断从MessageQueue
中
拿消息去执行。
这块我之前也有写个文章介绍,如果忘了可以去看看。
但是如果再继续追问Handler.
post
Delay
又是怎么做到的就讲不出来了。这里就给大家讲一讲。
首先来看看handler里面是怎么处理
post
...
Android
的消息机制之前有一篇文章有写,里面具体讲到了Handler怎么发送和处理消息的整个过程。感兴趣的同学可以先跳转过去看看 从Handler.
post
(Runnable r)再一次梳理
Android
的消息机制(以及handler的内存泄露)
通常要实现延时操作有这几种
方法
:
TimerTask
Rxjava
Thread
Handler
这里我们主要来关注最后一种
方法
,使用Handler的
post
Delay
ed
方法
来处理延时:
new Handler().
post
Delay
ed
mhandler.
post
Delay
ed
(runnable, 1000);
Handler的
post
Delay
ed
方法
其实也是通过sendMessag
eD
elay
ed
方法
实现的。
public final boolean
post
Delay
ed
(Runnable r, long
delay
Millis)
return sendMessag
eD
elay
ed
(get
Post
Message(r),
delay
Millis);
相信
android
开发的朋友们,对于handler一定非常的熟悉,本文只讲handler.
post
Delay
ed
()使用及具体的细节,不正确之处欢迎大家指正!!
下面给出具体的代码,并且附上运行后的结果package com.example.demo;import
android
.app.Activity;
import
android
.os.Bundle;
import
android
.os.H