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

正如我所说,我正在使用 toasts 来跟踪正在发生的事情。问题是在运行它时,我得到第一个 toast(启动时的服务 B)10 次,然后是第二个(计时器中的服务 B)10 次,因此它们之间没有时间。

我如何让每个吐司每 30 秒出现一次?

4

2 回答 2

0

好的,所以最终的答案可能是这样的:只调用一次 B 服务,在其中我们将拥有以 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 回答
0

如果您想每 30 秒敬酒一次,则可以使用处理程序:

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

如果您对此有任何疑问,请在此处发布,我会尽力帮助您..

于 2011-05-28T20:50:08.790 回答