守护线程,简单理解为主线程中,等待其他非守护线程执行结束后才结束的线程,利用这一特点,可以利用在Android开发中启动多个线程同步客户端和服务器的数据时,启动一个守护线程,等待其他同步数据的线程都结束,在其他非守护线程都结束的时候,做一些操作,比如在所有同步数据的线程都结束后,进入下一个Activity:
//同步头像
if (has_headimg.equals("Y")){
File headDir = context.getExternalFilesDir("head"); //初始化文件存储目录
File headFile = new File(headDir,gshid + ".jpg");
headimgDownloadThread = updateServerDataHttps.downloadFile("10014", gshid, "get_file", headFile);
headimgDownloadThread.join();
}
//同步地址信息
if (!addresses_id.equals("")){
addressThread = updateServerDataHttps.updateLoginAccountAddressDataToServer("12010", gshid, null, addresses_id);
addressThread.join();
}
//同步教学机构信息
if (!institutions_id.equals("")){
institutionThread = updateServerDataHttps.updateInstitutionDataToServer("12015", gshid, null, institutions_id);
institutionThread.join();
}
deamonThread = updateServerDataHttps.daemonThreadForUpdate();
// if (headimgDownloadThread != null){
// headimgDownloadThread.join();
// }
//
// if (addressThread != null){
// addressThread.join();
// }
//
// if (institutionThread != null){
// institutionThread.join();
// }
非守护线程先join和后join效果不同:
先join,守护线程会等到线程返回的handle都处理完成才结束
后join,守护线程只等待到同步线程执行结束,不会等到handle中方法执行结束