海兰!
我的了Thread.interrupt不起作用。
code(我们是全球性的):
//调用我们=新UpdateState(参数,可以HUP); us.start();// Interupt@覆盖 公共布尔onOptionsItemSelected(菜单项项){ 如果(item.getItemId()== R.id.stopthread) { Log.e(杀,杀); us.interrupt(); } 返回super.onOptionsItemSelected(项目); }
类:
包android.skiptvad;进口的java.util.List;进口org.apache.http.NameValuePair;进口android.os.Handler;进口android.os.Message;进口android.text.NoCopySpan.Concrete;进口android.util.Log;进口android.widget.TextView;进口android.widget.Toast;进口android.util.Log;公共类UpdateState继承Thread { 公开名单<&的NameValuePair GT; PARAMS; 公开处理程序处理程序; 公开处理程序插件; 公共UpdateState(列表<&的NameValuePair GT;参数,可以最终处理程序处理){ this.handler =处理程序; this.params =参数; this.ins =新的处理程序(){ @覆盖 公共无效的handleMessage(消息MSG){ 如果(msg.obj.toString()!= NULL) { JSONParse JSON = NULL; 尝试 { 消息MSG 2 =新的Message(); Log.e(Channel_State_Update,msg.obj.toString()); JSON =新JSONParse(msg.obj.toString()); 字符串状态= json.getChannelState(); Log.e(Channel_State_Send状态); msg2.obj =状态; handler.sendMessage(MSG 2); } 赶上(最终例外五) { e.printStackTrace(); } } } }; } @覆盖 公共无效的run(){ 而(真) { 如果(!this.isInterrupted()) { 的HttpConnection CON =新的HttpConnection(参数,可以http://surfkid.redio.de/getChannelState,this.ins); con.start(); 尝试{ Log.e(睡眠,开始); UpdateState.this.sleep(5000); Log.e(睡眠,结束); }赶上(InterruptedException的E){ // TODO自动生成catch块 Log.e(睡眠,错误); e.printStackTrace(); } } //super.run(); } }}
请帮忙
日志:
18 02-15:50:30.317:ERROR /睡眠(10696):结束02-15 18:50:30.347:ERROR /睡眠(10696):开始02-15 18:50:30.677:ERROR / Channel_State_Update(10696):{responseData:{channelState:0},responseDetails:空,responseStatus:200}02-15 18:50:30.677:ERROR / Channel_State_Send(10696):002-15 18:50:30.677:ERROR / UPDATE(10696):002-15 18:50:35.347:ERROR /睡眠(10696):结束02-15 18:50:35.357:ERROR /睡眠(10696):开始02-15 18:50:35.897:ERROR / Channel_State_Update(10696):{responseData:{channelState:0},responseDetails:空,responseStatus:200}02-15 18:50:35.897:ERROR / Channel_State_Send(10696):002-15 18:50:35.897:ERROR / UPDATE(10696):002-15 18:50:36.868:ERROR /杀(10696):杀死02-15 18:50:36.878:ERROR /睡眠(10696):错误02-15 18:50:36.908:ERROR /睡眠(10696):开始02-15 18:50:37.427:ERROR / Channel_State_Update(10696):{responseData:{channelState:0},responseDetails:空,responseStatus:200}02-15 18:50:37.427:ERROR / Channel_State_Send(10696):002-15 18:50:37.427:ERROR / UPDATE(10696):002-15 18:50:41.909:ERROR /睡眠(10696):结束02-15 18:50:41.927:ERROR /睡眠(10696):开始
解决方案
您需要打破一个循环时,线程被中断:
@覆盖公共无效的run(){ 而(!this.isInterrupted()){//当线程的中断标志设置退出 的HttpConnection CON =新的HttpConnection(参数,可以http://surfkid.redio.de/getChannelState,this.ins); con.start(); 尝试{ Log.e(睡眠,开始); UpdateState.this.sleep(5000); Log.e(睡眠,结束); }赶上(InterruptedException的E){ Log.e(睡眠,错误); e.printStackTrace(); //捕获InterruptedException的后恢复中断标志 //使循环条件为假 Thread.currentThread()中断()。 } }}
Hy!
My Thread.interrupt doesn't work.
Code (us is global):
//Call
us = new UpdateState(params, hup);
us.start();
//Interupt
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId()== R.id.stopthread)
{
Log.e("Kill", "Kill");
us.interrupt();
}
return super.onOptionsItemSelected(item);
}
Class:
package android.skiptvad;
import java.util.List;
import org.apache.http.NameValuePair;
import android.os.Handler;
import android.os.Message;
import android.text.NoCopySpan.Concrete;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import android.util.Log;
public class UpdateState extends Thread {
public List<NameValuePair> params;
public Handler handler;
public Handler ins;
public UpdateState(List<NameValuePair> params, final Handler handler) {
this.handler = handler;
this.params = params;
this.ins = new Handler (){
@Override
public void handleMessage(Message msg) {
if (msg.obj.toString()!= null)
{
JSONParse json = null;
try
{
Message msg2 =new Message();
Log.e("Channel_State_Update",msg.obj.toString());
json = new JSONParse(msg.obj.toString());
String state = json.getChannelState();
Log.e("Channel_State_Send",state);
msg2.obj = state;
handler.sendMessage(msg2);
}
catch (final Exception e)
{
e.printStackTrace();
}
}
}
};
}
@Override
public void run() {
while (true)
{
if (!this.isInterrupted())
{
HttpConnection con = new HttpConnection(params, "http://surfkid.redio.de/getChannelState", this.ins);
con.start();
try {
Log.e("Sleep", "Begin");
UpdateState.this.sleep(5000);
Log.e("Sleep", "End");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
Log.e("Sleep", "Error");
e.printStackTrace();
}
}
//super.run();
}
}
}
Please help
Log:
02-15 18:50:30.317: ERROR/Sleep(10696): End
02-15 18:50:30.347: ERROR/Sleep(10696): Begin
02-15 18:50:30.677: ERROR/Channel_State_Update(10696): {"responseData":{"channelState":"0"},"responseDetails":null,"responseStatus":200}
02-15 18:50:30.677: ERROR/Channel_State_Send(10696): 0
02-15 18:50:30.677: ERROR/UPDATE(10696): 0
02-15 18:50:35.347: ERROR/Sleep(10696): End
02-15 18:50:35.357: ERROR/Sleep(10696): Begin
02-15 18:50:35.897: ERROR/Channel_State_Update(10696): {"responseData":{"channelState":"0"},"responseDetails":null,"responseStatus":200}
02-15 18:50:35.897: ERROR/Channel_State_Send(10696): 0
02-15 18:50:35.897: ERROR/UPDATE(10696): 0
02-15 18:50:36.868: ERROR/Kill(10696): Kill
02-15 18:50:36.878: ERROR/Sleep(10696): Error
02-15 18:50:36.908: ERROR/Sleep(10696): Begin
02-15 18:50:37.427: ERROR/Channel_State_Update(10696): {"responseData":{"channelState":"0"},"responseDetails":null,"responseStatus":200}
02-15 18:50:37.427: ERROR/Channel_State_Send(10696): 0
02-15 18:50:37.427: ERROR/UPDATE(10696): 0
02-15 18:50:41.909: ERROR/Sleep(10696): End
02-15 18:50:41.927: ERROR/Sleep(10696): Begin
解决方案
You need to break a loop when thread is interrupted:
@Override
public void run() {
while (!this.isInterrupted()) { // Exit when thread's interrupt flag is set
HttpConnection con = new HttpConnection(params, "http://surfkid.redio.de/getChannelState", this.ins);
con.start();
try {
Log.e("Sleep", "Begin");
UpdateState.this.sleep(5000);
Log.e("Sleep", "End");
} catch (InterruptedException e) {
Log.e("Sleep", "Error");
e.printStackTrace();
// Restore interrupt flag after catching InterruptedException
// to make loop condition false
Thread.currentThread().interrupt();
}
}
}