关闭

Android疑问1——Handler的removeCallbacks方法无效?(已经明白了)

标签: androidbutton聊天threadclass
25376人阅读 评论(26) 收藏 举报
分类:

STOP MAINTENANCE!(2017-05-25)


  刚在做复习时发现了一个问题,加入了Handler的线程,即使调用了removeCallbacks线程还是存在,而且退出了Activity之后线程还在运行。难道是removeCallBacks无效?还是我哪里写错了?


package cfuture09.handlerProgress;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;

public class HandlerProgressActivity extends Activity {
	
	Button start;
	ProgressBar progressBar;
	Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			progressBar.setProgress(msg.arg1);
			handler.post(r);
		}

	};
	
	Runnable r = new Runnable() {
		
		int i = 0;
		@Override
		public void run() {
			// TODO Auto-generated method stub
			System.out.println("Begin thread");
			i += 10;
			Message msg = handler.obtainMessage();
			msg.arg1 = i;
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
//			if ( i < 100) { 
				handler.sendMessage(msg);
//			}
			if ( i >= 100) {
				handler.removeCallbacks(r);
				System.out.println("end");
			}
		}
	};
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        start = (Button) findViewById(R.id.start);
        progressBar = (ProgressBar) findViewById(R.id.progress);
        start.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				progressBar.setVisibility(ProgressBar.VISIBLE);
				handler.post(r);
			}
		});
    }
}

  刚和一个同学聊天说到这一段,跟他一说,忽然之间自己想明白了。原来还是代码的逻辑错误。这段代码我是看视频写的,可能视频的作者在写这段代码时也没注意到这个问题。在看了之后的视频我才想明白。聊天记录用图片贴上来吧。


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

handler中的handler.removecallbacks和handler.removemessages的用法

1, postDelayed方法和removeCallbacks方法的使用 方法postDelayed的作用是延迟多少毫秒后开始运行,而removeCallbacks方法是删除指定的Runnable...
  • huwenzhi1991
  • huwenzhi1991
  • 2015-06-17 16:15
  • 2210

Handler如何移除Message

问题: 1.removeMessage(what)函数是否只能移除对应what值的Message? 2.对于Delayed发送的Message,能否提前remove? 代码测试: pa...
  • javine
  • javine
  • 2015-05-24 17:48
  • 5045

Android 定时器实现的几种方式和removeCallbacks失效问题详解

实现定时器有很多种方式,在这里我简单的介绍几种方式 (1)使用Handler + Runnable的方式 Handler handler = new Handler(); Runnable runn...
  • xiaanming
  • xiaanming
  • 2013-06-03 11:42
  • 30711

Android中Handler.removeCallbacksAndMessages(null)的作用

众所周知,在Android开发中会大量使用到Handler。但是,由于与activity生命周期不一致,当一个Activity被销毁时,如果Handler对象有Message在排队,则无法释放,进而导...
  • JustDoItToday
  • JustDoItToday
  • 2015-04-07 16:18
  • 3867

关于removeCallbacks不能移除消息的问题

关于removeCallbacks不能移除消息的问题开发中遇到一个问题,通过handler去post一个runnable的时候,进而循环去post,然后在页面销毁的时候去移除runnable的所有消息...
  • shayubuhuifei
  • shayubuhuifei
  • 2017-06-17 11:11
  • 811

放心使用Handler的removeCallbacksAndMessages

我在A类初始化了一个Handler,使用的是主线程的Looper,用于发送延迟消息和主线程切换,当A类释放资源的时候我调用removeCallbacksAndMessages(null),意思是清空当...
  • w958796636
  • w958796636
  • 2017-04-24 09:42
  • 1547

android Handlerr.removeCallbacksAndMessages(null)的妙用

android Handlerr.removeCallbacksAndMessages(null)的妙用
  • coderinchina
  • coderinchina
  • 2015-07-22 14:14
  • 910

Android Handler removeMessages引发postDelayed失效的问题

最近遇到一个使用Handler removeMessages时使 使用boolean postDelayed(Runnable r, long delayMillis)函数post的Runnable也...
  • Romantic_Energy
  • Romantic_Energy
  • 2016-01-03 12:35
  • 3417

Handler将Runnable放入线程队列,removecallback()移除Runnable

下面是小demO public class MainActivity extends Activity { private Handler handler; private Ru...
  • u011057161
  • u011057161
  • 2014-09-21 23:09
  • 2011

实习入职第二天:Handler.removeMessages的作用

1、这个方法使用的前提是之前调用过sendEmptyMessageDelayed(0, time),意思是延迟time执行handler中msg.what=0的方法; 2、在延迟时间未到的前提下...
  • u014737138
  • u014737138
  • 2016-05-20 15:55
  • 1164
    个人资料
    • 访问:2130795次
    • 积分:14236
    • 等级:
    • 排名:第1010名
    • 原创:139篇
    • 转载:0篇
    • 译文:89篇
    • 评论:891条
    欢迎访问我的博客
    个人博客:http://githang.com
    QQ群
    博客专栏
    最新评论
    我的公众号
    微信关注我的公众号
    站长统计