countDownTimer不工作,为什么?
我有一个服务B以固定的时间间隔发送特定数量的消息。 该服务从其他服务A.叫 在服务质量上使用的代码是countDownTimer不工作,为什么?
@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();
}
正如我所说的,我使用的祝酒词来跟踪什么HAPP效果图创作。问题是运行它时,我得到第一个吐司(服务B在开始)10倍,因此第二个(服务B在计时器中)10倍,因此他们之间没有时间。
我该如何让这些吐司每30秒出现一次?
好了,所以最终的答案可能是这样的: 电话只有一次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);
}
我希望这可以帮助别人!
它工作gr8。 thx Cata:D – wassim 2011-05-29 22:51:45
如果你想敬酒,每30秒多,你可以做到这一点通过使用一个处理程序:
Handler myHandler = new Handler();
Runnable run = new Runnable()
{
public void run()
{
showToast();
}
};
myHandler.postDelayed(run, 30000);
如果你有这样的问题只是张贴在这里,我会尽力帮助你..
仍然有同样的问题。也许问题来自服务A.正如我所说的敬酒只是为了测试计时器是否工作。 – wassim 2011-05-28 21:10:20
正如我在上面的示例中所看到的那样,您在for语句中创建了一个ServiceB的新实例? – Cata 2011-05-28 21:13:35
是的,但我想它是不止一次创建。也许这就是问题所在。它尝试了以下代码服务 \t while(NumberOfSentMessages!= NumberOfMessagesToSend) \t \t \t {Handler myHandler = new Handler(); \t \t \t Runnable运行=新可运行() \t \t \t { \t \t \t \t公共无效的run() \t \t \t \t { \t \t \t \t \t \t \t \t \t \t startServiceB(); \t \t \t \t \t \t \t \t \t} \t \t \t}; \t \t \t myHandler.postDelayed(run,30000); \t \t \t NumberOfSentMessages ++; \t \t \t} 它给力闭合误差。我真正需要的是每30秒运行一次服务B的实例 – wassim 2011-05-28 21:18:44
那么你想每30秒钟举杯一杯吗? – Cata 2011-05-28 20:29:37