我有一个服务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次,然后第二次(服务B在计时器中)10次,因此它们之间没有时间。
如何让每个吐司每30秒出现一次?
答案 0 :(得分:0)
如果你想通过使用处理程序每30秒做一次祝酒:
Handler myHandler = new Handler();
Runnable run = new Runnable()
{
public void run()
{
showToast();
}
};
myHandler.postDelayed(run, 30000);
如果您对此有疑问,请在此处发帖,我会尽力帮助您。
答案 1 :(得分: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);
}
我希望这也有助于其他人!