在Android应用程序中休眠/等待

时间:2010-04-20 01:59:11

标签: android sleep

我有一个活动,一个接一个地调用一个线程10次。但是,如果网络速度较慢或加载了太多信息,则会发生强制关闭。在每个线程中添加睡眠有助于解决这个问题吗?或者还有其他方法可以解决它吗?

   public void run() {
         if(thread_op.equalsIgnoreCase("xml")){
              readXML();
         }
         else if(thread_op.equalsIgnoreCase("getImg")){
              getWallpaperThumb();
         }
         handler.sendEmptyMessage(0);
    }

    private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                    int count = 0;
                    if (!myExampleHandler.filenames.isEmpty()){
                          count = myExampleHandler.filenames.size();
                    }
                    count = 5;
                    if(thread_op.equalsIgnoreCase("xml")){
                            pd.dismiss();
                            thread_op = "getImg";
                            btn_more.setBackgroundResource(R.drawable.btn_more);

                    }
                    else if(thread_op.equalsIgnoreCase("getImg")){
                            setWallpaperThumb();
                            index++;
                            if (index < count){
                                    Thread thread = new Thread(GalleryWallpapers.this);
                                    thread.start();

                            }
                    }
            }
    };

2 个答案:

答案 0 :(得分:1)

第一步应该是检查堆栈跟踪,这将给出违规行和原因。您可以使用Logcat。

答案 1 :(得分:0)

您是否收到应用程序未响应对话框(ANR)或您的应用程序是否已关闭?

当UI循环线程从呼叫返回时间过长时,会出现ANR。只要handleMessage函数及时返回,有10个或100个线程不会导致任何问题。

如果你真的想限制一次运行应该运行的线程数,请查看ExecutorService

ExecutorService executorService = Executors.newFixedThreadPool(5);
    executorService.submit(new Runnable() {
        public void run() {
            // This is your thread
        }
    });

您可以将所有10个作业提交给执行者服务,它们将一个接一个地运行,最多同时运行5个。