2010-04-20 59 views
0

我有一個活動,一個接一個地調用一個線程10次。但是,如果網絡速度較慢或載入的信息過多,則會發生強制關閉。在每個線程中添加睡眠是否有助於解決此問題?還是有其他解決方法嗎?睡眠/在Android應用程序中等待

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

          } 
        } 
      } 
    }; 
+0

爲什麼不先測試網絡速度,然後開始減少呼叫次數,獲取一些時間,並跟蹤響應需要多長時間,並且如果它們開始變得太慢,則減少一次呼叫的次數。 – 2010-04-20 02:01:13

+0

恩......我測試過了。如果我加載少於5次,那麼它工作正常。超過5次通常會將其擰緊。但我真的需要加載它10次。因此,我能做什麼解決方案?我已經添加了部分代碼,因爲我使用可運行和處理函數來啓動新線程。 – Lynnooi 2010-04-20 02:38:53

回答

0

您是否收到應用程序未響應對話框(ANR)或您的應用程序組件是否關閉?

當UI looper線程從呼叫返回時間過長時,會顯示ANR。只要handleMessage函數及時返回,就有10或100個線程不應該引起任何問題。

如果你真的想限制應該在一個正在運行的線程數去查查ExecutorService的

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

您可以提交所有10個就業機會執行人的服務,他們將先後與運行一個最多5個同時運行。

+0

這些應用程序強行關閉 – Lynnooi 2010-04-20 05:20:07

+0

在這種情況下,請編輯您的帖子以包含來自logcat的堆棧跟蹤。這將清楚地表明問題出在哪裏。 – Prashast 2010-04-21 00:36:31

1

第一步應該是檢查堆棧軌跡,它會給出有問題的線和原因。你可以使用Logcat。