2017-02-16 36 views
0

我的應用程序接收消息,並具有調度接連每一個具有不同延遲的多個答覆之一。具有大約2000次延遲任務的最佳方式是什麼?由於資源有限,似乎Android不能同時運行那麼多處理程序。許多postDelayed處理程序具有不同延遲(約2.000)

任何想法?

在此先感謝。

代碼簡化:

class TimedTask extends TimerTask { //runs every 10 seconds and checks for new contacts in queue to reply to (contacts can go up to 500 ones) 
     SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(SendMessagesService.this); 
     String contacts = sp.getString("contacts", ""); //queued by another Thread 

     String contacts_array[] = contacts.split(","); 

     for (String contact : contacts_array) { 
       Handler handler = new Handler(); 
          handler.postDelayed(new Runnable() { 
           @Override 
           public void run() { 

            String message = sp.getString("message1",""); //there are different messages with different delays, depending on which were already sent 

            ReceiveContactsAdapter mDbHelper = new ReceiveContactsAdapter(SendMessagesService.this); 
            mDbHelper.open(); 
            mDbHelper.sendMessages(message, contact); 
            mDbHelper.close(); 
           } 
          }, delay); //delay depends on which message will be sent 
     } 
} 
+1

是有可能使用隊列來解決這個問題? – king

+1

@king隊列會被阻止,因爲不同的任務有不同的延遲時間 – LoveForDroid

+0

請使用您的處理程序(非功能性)的代碼,以便我們瞭解你想要達到什麼樣的想法。 – dipdipdip

回答

1

您可以(以毫秒爲單位),而不是使用了Thread.Sleep。它延遲了特定時間的線程。

@Override 
     public void run() 
     { 
      while (!Thread.interrupted()) 
       try 
       { 
        Thread.sleep(1000); 
        MainActivity.this.runOnUiThread(new Runnable() 
        { 

         @Override 
         public void run() 
         { 
          //// 
         } 
        }); 
       } 
       catch (InterruptedException e) 
       { 

       } 
     } 
    })).start(); 
+0

我認爲行不通,因爲很多任務都需要不同的延遲,這是不可能的運行在一起 – Panther

+1

添加不同thread.sleep(延遲)最新的概率? – Sumit

+0

啊好吧我知道。這是更高效的資源嗎? – Panther