Java Android线程正在等待
在我的Android应用程序中,我使用一个初始活动来启动ASyncTask,然后启动mainactivity,下载大约10幅图像并在表格中向用户显示。 我今天刚开始研究DDMS和调试模式,我看到在加载应用程序之后,我有一个线程用于异步任务,还有10个http线程在等待。这正常吗?他们不应该随着最后一条指令的执行而死去吗 这是我的密码:Java Android线程正在等待,java,android,multithreading,thread-safety,android-asynctask,Java,Android,Multithreading,Thread Safety,Android Asynctask,在我的Android应用程序中,我使用一个初始活动来启动ASyncTask,然后启动mainactivity,下载大约10幅图像并在表格中向用户显示。 我今天刚开始研究DDMS和调试模式,我看到在加载应用程序之后,我有一个线程用于异步任务,还有10个http线程在等待。这正常吗?他们不应该随着最后一条指令的执行而死去吗 这是我的密码: public void download (String imageURL, String path, String filename){ new Th
public void download (String imageURL, String path, String filename){
new Thread(){
public void run() {
long startTime = System.currentTimeMillis();
try {
//Create the path
new File(path).mkdirs();
//File to download
File file = new File(path+filename);
if (!file.exists()){
Log.d(Manager.getAppName(),file.getName()+" dont exists");
URL url = new URL(imageURL);
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
FileOutputStream fos = new FileOutputStream(file);
fos.write(baf.toByteArray());
bis.close();
fos.close();
is.close();
Log.d(Manager.getAppName(), "download ready in "
+( (float)(System.currentTimeMillis() - startTime) / 1000f)
+ " sec");
} else {
Log.d(Manager.getAppName(),"File exists (ignoring)");
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (latch!=null){
latch.countDown();
Log.d(Manager.getAppName(),"Download finished "+latch.getCount()+" remaining");
}
}
}).start();
}如果线程是线程池的一部分,则线程不会死亡。您自己启动它们吗?这是正确的行为,因为AsyncTask和库(如okhttp)使用线程池。根据系统的不同,池中最多可以有线程数。每当需要一个新线程时,比如创建一个新的AsyncTask时,就会使用池中的一个空闲线程,从而防止每次创建一个新线程所涉及的开销。任务完成后,线程将返回池中的空闲状态,状态为wait 请提供用于启动它们的代码以及运行时的相关部件。是的,我对这个话题很好奇,请用你的代码更新这个问题。