handler中的handler.removecallbacks和handler.removemessages的用法
2015-06-17 16:15
711 查看
1, postDelayed方法和removeCallbacks方法的使用
方法postDelayed的作用是延迟多少毫秒后开始运行,而removeCallbacks方法是删除指定的Runnable对象,使线程对象停止运行.
public class Main extends Activity {
private Button button1;
private Button button2;
private Handler handler = new Handler();
private int count = 0;
private Runnable runnableRef = new Runnable() {
public void run() {
Log.v("2", Thread.currentThread().getName());
count++;
Log.v("!", "count=" + count);
handler.postDelayed(runnableRef, 1000);
//此处是handler自己调用自己处理,所以就循环
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.v("1", Thread.currentThread().getName());
button1 = (Button) this.findViewById(R.id.button1);
button2 = (Button) this.findViewById(R.id.button2);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Thread thread = new Thread(runnableRef);
thread.start();
Log.v("!!!!!!!!!!!!!", "end");
}
});
button2.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
handler.removeCallbacks(runnableRef);
}
});
}
}
---------------------------------------------------------------------------------------------------------------
效果图:程序运行后单击button1按钮开始循环,count累加1,运行结果如图6.41所示。
2,handler.removemessages
1、这个方法使用的前提是之前调用过sendEmptyMessageDelayed(0,
time),意思是延迟time执行handler中msg.what=0的方法;
2、在延迟时间未到的前提下,执行removeMessages(0),则上面的handler中msg.what=0的方法取消执行;
3、在延迟时间已到,handler中msg.what=0的方法已执行,再执行removeMessages(0),不起作用。
方法postDelayed的作用是延迟多少毫秒后开始运行,而removeCallbacks方法是删除指定的Runnable对象,使线程对象停止运行.
public class Main extends Activity {
private Button button1;
private Button button2;
private Handler handler = new Handler();
private int count = 0;
private Runnable runnableRef = new Runnable() {
public void run() {
Log.v("2", Thread.currentThread().getName());
count++;
Log.v("!", "count=" + count);
handler.postDelayed(runnableRef, 1000);
//此处是handler自己调用自己处理,所以就循环
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.v("1", Thread.currentThread().getName());
button1 = (Button) this.findViewById(R.id.button1);
button2 = (Button) this.findViewById(R.id.button2);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Thread thread = new Thread(runnableRef);
thread.start();
Log.v("!!!!!!!!!!!!!", "end");
}
});
button2.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
handler.removeCallbacks(runnableRef);
}
});
}
}
---------------------------------------------------------------------------------------------------------------
效果图:程序运行后单击button1按钮开始循环,count累加1,运行结果如图6.41所示。
图6.41 循环加1效果 |
1、这个方法使用的前提是之前调用过sendEmptyMessageDelayed(0,
time),意思是延迟time执行handler中msg.what=0的方法;
2、在延迟时间未到的前提下,执行removeMessages(0),则上面的handler中msg.what=0的方法取消执行;
3、在延迟时间已到,handler中msg.what=0的方法已执行,再执行removeMessages(0),不起作用。
相关文章推荐
- C# 获取两个矩形相减部分的GraphicsPath
- sobel边缘检测算子
- php网站优化-(ab测试)
- 算法 线性排序-计数排序
- Scripts:ash_gcwait_to_obj.sql
- 合理规划SAT阅读备考节奏
- 深入理解linux内核读书笔记(第三章)
- usb fx2 cy68013 Cyapi使用心得
- iOS app调试的黑魔法--第三方库
- 【整理】MySQL引擎
- jQuery开发之超链接提示效果和图片提示效果
- HDU 1800 Flying to the Mars 字符串哈希||字典树||map
- Hadoop2.6 Ha 安装
- 十六进制转化为十进制的方法
- ps -aux|grep 详细信息
- LICEcap
- 单例设计模式
- php安装redis 和redis扩展
- sat数学逻辑推理题解题方法
- java中JFrame 窗口关闭时,弹出一个对话框提示是否确定关闭