您的位置:首页 > 其它

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所示。


图6.41 循环加1效果

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),不起作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: