返回信息流源代码如下,此代码作用是利用handler实现进度条的更新。问题就在handler开启的线程没有随着onDestroy()的调用而销毁,也没有随着
if(i==100)
{
handler.removeCallbacks(r);
}
而停止这个线程,这个线程就是一直的跑着的。通过Debug调试,可以看到在i=10的时候调用了handler.sendMessage(msg),然后又调用了
if(i==100)
{
handler.removeCallbacks(r);
}
不过handler.removeCallbacks(r);并没有阻止程序调用
public void handleMessage(Message msg)
{
bar.setProgress(i);
handler.postDelayed(r,500);
}
,所以这个程序就一直运行着,即使调用OnDestroy中的handler.removeCallbacks(r);也不好使,有木有大牛帮着看看解答一下啊,真心困扰很久了呀···。
package com.example.handlerlesson;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
public class MainActivity extends Activity {
ProgressBar bar;
Button button;
Handler handler= new Handler() ;
int i=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bar=(ProgressBar)findViewById(R.id.bar);
button=(Button)findViewById(R.id.button);
bar.setMax(100);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handler.post(r);
}
});
handler= new Handler(){
@Override
public void handleMessage(Message msg)
{
bar.setProgress(i);
handler.postDelayed(r,500);
}
};
}
Runnable r= new Runnable(){
@Override
public void run()
{
Message msg= handler.obtainMessage();
i=i+10;
msg.arg1=i;
Log.e("---------Runnable------", Thread.currentThread().getName()+"----"+i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.sendMessage(msg);
if(i==100)
{
handler.removeCallbacks(r);
}
}
};
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
handler.removeCallbacks(r);
Log.e("tag3", "onDestroy");
super.onDestroy();
}
}
这是一条镜像帖。来源:北邮人论坛 / java / #26345同步于 2013/7/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
【请教大牛】关于handler和线程的问题
happy1100
2013/7/14镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
你只是将handler中的线程移出handler,而不是结束了线程。结束线程需要调用Thread.currentThread().interrupt();