今天在完成Android练习“后台程序运行进度提示---ProgressBar与Handler的整合应用”的过程中,发现了一个奇怪的现象。在我的程序第一次运行的过程中,可以正常地显示运行的状态,但是再次运行时,却不能正常显示状态,具体情况如下:
图1 程序正常运行(能够正常显示运行状态)
图2 程序不正常运行(再次运行时不能正确显示运行状态)
经过分析,发现应该是程序在第一次运行后创建的线程一直在后台运行,没有结束掉,再次运行程序时,线程仍处于中断中,导致if判断不能往下继续执行,if判断的相关代码如下:
Handler myMessageHandler = new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case MainActivity.GUI_STOP_NOTIFIER:
mTextView01.setText(R.string.str_progress_done);
mProgressBar01.setVisibility(View.GONE);
Thread.currentThread().interrupt();
break;
case MainActivity.GUI_THREADING_NOTIFIER:
if(!Thread.currentThread().isInterrupted()){
mProgressBar01.setProgress(intCounter);
mTextView01.setText(
getResources().getText(R.string.str_progress_start)+"("+Integer.toString(intCounter)+"%)\n"+
"Progress:"+Integer.toString(mProgressBar01.getProgress())+"\n"+
"Indeterminate:"+Boolean.toString(mProgressBar01.isIndeterminate()));
}
break;
}
super.handleMessage(msg);
}
};
如果我将代码中关于Tread中断和Thread中断判断的部分内容注释掉,程序运行的状态就能够正常显示。Android后来的版本中将线程的stop()和suspend()等一些方法deprecated。线程中断后,如何让线程恢复中断呢?