Android线程等待

时间:2011-07-15 00:36:39

标签: java android multithreading thread-safety android-asynctask

在我的Android应用程序中,我使用初始Activity来使用ASyncTask进行加载启动,然后启动mainactivity,下载大约10个图像并将其显示给表中的用户。 我今天刚开始研究DDMS和调试模式,我看到在app加载后,我有一个用于asynctask的线程和10个http线程等待。这是正常的吗?难道他们不应该死在执行最后一条指令吗?

这是我的代码:

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();

}

2 个答案:

答案 0 :(得分:0)

如果线程池是线程池的一部分,它们就不会死亡。你是自己开始的吗?

答案 1 :(得分:0)

这是正确的行为AsyncTask和像okhttp这样的库使用线程池。根据系统的不同,池中可以有最大数量的线程。每当需要新线程时(例如创建新的AsyncTask时),将使用池中的一个空闲线程,从而防止每次创建新线程所涉及的开销。任务完成后,线程返回池中的空闲状态,状态为" wait"。