handler.handler的postdelayedd怎么重新计时

android线程控制UI更新(Handler 、post()、postDelayed()、postAtTime)
线程是单线程的。 所以更新UI要用到Handler:
private Handler splashHandler = new Handler() {&&&& public void handleMessage(Message msg) {&&&& & switch (msg.what) {&&&& & case OVER:&&&& && progressDialog.dismiss();&&&& &&&&&& & default:&&&&&&&&& &&&&& & }&&&&&&&&& super.handleMessage(msg);&&&& }}; 当一个线程运行完毕后可以发送通知给Hanler,通知主线程更新UI :
new Thread() {public void run() {&&& &&initList();&&& &&Message m = splashHandler.obtainMessage(OVER);&&& &&splashHandler.sendMessage(m);&&& &&splashHandler.post(r);&&& &&splashHandler.postDelayed(r, delayMillis);&&& &&splashHandler.postAtTime(r, uptimeMillis);
&& }}.start();也可以直接使用:
splashHandler.post(new Runnable(){&&& public void run() {&&& progressDialog.dismiss();}});//splashHandler.postDelayed(r, delayMillis);//splashHandler.postAtTime(r, uptimeMillis);直接在Runnable 中更新UI,因为此时的 Runnable 是运行在UI所在的主线程中。
android线程控制UI更新(Handler 、post()、postDelayed()、postAtTime)
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'一个使用Handler的postDelayed()方法的大bug,求大神指点_java吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:484,237贴子:
一个使用Handler的postDelayed()方法的大bug,求大神指点收藏
我在android上编写了一个用Handler和Runnable实现简单自动播放的功能,在Runnalbe的run()方法里用了一个postDelayed(mRun, SPEED); 当播放完最后一个内容后removeCallbacks(mRun);然后在“开始”按钮的监听事件中mHandler.post(mRun); 在“快进”和“后退”的监听事件中也写了removeCallbacks(mRun)和postDelayed(mRun, SPEED)的代码,以便保持播放的节奏。但是在测试的时候由于极快的点击了“快进”按钮(大概几十下),当重新点击“开始”按钮时,自动的播放的速度忽然变得极快,SPEED参数完全不起作用了!关闭程序后重新打开仍然是那样,关闭手机重启也不行,关机抠电池重启也行求大神分析一下问题大概可能出在什么地方?关键是程序重启也不行,是android底层的Handler处理出什么问题了吗?
水灌得真快顶起来。。。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或Android之Handler的postDelayed()步骤的用法 - 操作系统当前位置:& &&&Android之Handler的postDelayed()步骤的用法Android之Handler的postDelayed()步骤的用法&&网友分享于:&&浏览:15次Android之Handler的postDelayed()方法的用法
引用引:/zqq/archive//3038170.html这是一种可以创建多线程消息的函数使用方法:1,首先创建一个Handler对象Handler handler=new Handler();2,然后创建一个Runnable对象Runnable runnable=new Runnable(){&& @Override&& 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对象的话会比较容易操作。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有下次自动登录
现在的位置:
& 综合 & 正文
handler的使用—如何实现Android计时与倒计时的几种方法
Timer与TimerTask(Java实现)
public class timerTask extends Activity{
private int recLen = 11;
private TextView txtV
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);
TimerTask task = new TimerTask() {
public void run() {
runOnUiThread(new Runnable() {
public void run() {
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 txtV
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);
final Handler handler = new Handler(){
public void handleMessage(Message msg){
switch (msg.what) {
txtView.setText(""+recLen);
if(recLen & 0){
timer.cancel();
txtView.setVisibility(View.GONE);
TimerTask task = new TimerTask() {
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
Handler与Message(不用TimerTask)
public class timerTask extends Activity{
private int recLen = 11;
private TextView txtV
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.timertask);
txtView = (TextView)findViewById(R.id.txttime);
Message message = handler.obtainMessage(1);
handler.sendMessageDelayed(message, 1000);
final Handler handler = new Handler(){
public void handleMessage(Message msg){
switch (msg.what) {
txtView.setText("" + recLen);
if(recLen & 0){
Message message = handler.obtainMessage(1);
handler.sendMessageDelayed(message, 1000);
txtView.setVisibility(View.GONE);
super.handleMessage(msg);
Handler与Thread(不占用UI线程)
public class timerTask extends Activity{
private int recLen = 0;
private TextView txtV
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.timertask);
txtView = (TextView)findViewById(R.id.txttime);
new Thread(new MyThread()).start();
final Handler handler = new Handler(){
public void handleMessage(Message msg){
switch (msg.what) {
txtView.setText("" + recLen);
super.handleMessage(msg);
public class MyThread implements Runnable{
public void run(){
while(true){
Thread.sleep(1000);
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 txtV
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() {
public void run() {
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消息处理
如果对UI线程交互要求不很高,可以选择方法2和方法3
如果考虑到UI线程阻塞,严重影响到用户体验,推荐使用方法4,另起线程单独用于计时和其它的逻辑处理
方法5,综合了前几种方法的优点,是最简的
&&&&推荐文章:
【上篇】【下篇】<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 handler的postdelayed 的文章

 

随机推荐