2017-02-16 9 views
0

私のアプリはメッセージを受信し、それぞれ異なる遅延で複数の返信を1つずつ順番にスケジュールする必要があります。さまざまな遅延を伴う約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

他のタスクの遅延時間が異なるため、キューがブロックされている – 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

関連する問題