如何安全地停止线程?
downloadThread = new Thread(new Runnable() {
@Override
public void run() {
});
downloadThread.start();
}
使用Android SDK的 AsyncTask
来执行后台任务,而不是使用普通线程。在这里可以找到一个 cancel()
方法。
中断线程。在线程的run()
方法中,在不同的逻辑块结束时检查isInterrupted()
的值。
例如,假设你的run()
方法可以分为三个逻辑步骤 - 创建网络连接、下载图像和将图像保存到文件。在每个步骤结束时,检查isCancelled()
并停止操作,在该点丢弃所有状态。
class NetworkFetcherTask extends AsyncTask<String, Void, Void>{
public void doInBackground(String... params){
String url = params[0];
//Open connection if not cancelled
if(isCancelled()){
conn.close();
return;
}
NetworkConnection conn = new NetworkConnection();
//Download the image if not cancelled
if(isCancelled()){
conn.close();
result.discard();
return;
}
NetworkResult result = conn.fetchUrl(url);
conn.close();
//Save the image to a file if not cancelled
if(isCancelled()){
result.discard();
return;
}
File file = new File();
file.dump(result);
}
}
最简单的方法似乎是将isRunning设置为false。