0

一定の間隔で特定の数のメッセージを送信するサービスBがあります。このサービスは別のサービスAから呼び出されます。サービスAで使用されるコードは

@Override
public void onStart (Intent intent,int startid)
{
    Toast.makeText(this, "Service A Running onStart", Toast.LENGTH_LONG).show();

    Thread MessagesThread = new Thread(new Runnable()
    {
        public void run()
        {
            ApplicationPreferences AppPrefs = new ApplicationPreferences(getApplicationContext());
            int NumberOfMessagesToSend = Integer.parseInt(AppPrefs.getNumberOfMessagesToSend());
            int NumberOfSentMessages;

            for (NumberOfSentMessages = 0 ; NumberOfSentMessages < NumberOfMessagesToSend; NumberOfSentMessages++ )
            {startServiceB();
             }
        }
    });
    MessagesThread.start();
}

public void startServiceB()
{
    final Intent sendingMessages = new Intent(this, ServiceB.class);
    startService(sendingMessages);
}

乾杯は何が起こっているかを追跡するためのものですサービスBのコードは次のとおりです

@Override
public void onStart(Intent intent, int startId)
{
    super.onStart(intent, startId);
    Toast.makeText(getApplicationContext(), "Service B at start ", Toast.LENGTH_LONG).show();
    new CountDownTimer(30000,1000)
    {
        public void onTick (long millisUntilFinished) {}

        public void onFinish()
        {
            showToast();
        }
    }.start();
}

showToast()関数は次のとおりです

public void showToast()
{
    Toast.makeText(getApplicationContext(), "Service B in timer", Toast.LENGTH_LONG).show();
}

私が言ったように、私は何が起こっているかを追跡するためにトーストを使用しています。問題は、それを実行しているときに、最初のトースト(開始時のサービスB)を10回取得し、次に2番目のトースト(タイマーのサービスB)を10回取得し、その間に時間がないことです。

このトーストのそれぞれを30秒に1回表示するにはどうすればよいですか?

4

2 に答える 2

0

ハンドラーを使用して行うよりも30秒ごとにトーストを作成する場合は、次のようにします。

 Handler myHandler = new Handler();
Runnable run = new Runnable()
{
    public void run() 
    {
        showToast();                 
    }
};
myHandler.postDelayed(run, 30000);

これに問題がある場合は、ここに投稿してください。サポートさせていただきます。

于 2011-05-28T20:50:08.790 に答える
0

さて、最終的な答えは次のようになります。Bサービスを1回だけ呼び出すと、30秒間隔でループするハンドラーが作成されます。

サービスBコード:

 int loop = 5;
    int counter = 0;
Handler myHandler;
Runnable run;

    @Override
    public void onStart(Intent intent, int startId)
    {
        super.onStart(intent, startId);
        Toast.makeText(getApplicationContext(), "Service B at start ", Toast.LENGTH_LONG).show();
        myHandler = new Handler();
        run = new Runnable()
        {
         public void run() 
         {
          if (counter<loop){
           showToast(); 
           counter++;   
          } else {
            myHandler.removeCallbacks(run);
          }
         }
       };
       myHandler.postDelayed(run, 30000);

    }

これが他の誰かにも役立つことを願っています!

于 2011-05-29T17:20:43.350 に答える