服务中的Android计时器
在我创建的服务中运行计时器时遇到问题。计时器调用的任务没有被调用。我知道,当我在服务中放置祝酒词并调用它们时,服务就会启动,但当它们在计时器内时,服务不会启动。谢谢你的帮助 服务类别:服务中的Android计时器,android,Android,在我创建的服务中运行计时器时遇到问题。计时器调用的任务没有被调用。我知道,当我在服务中放置祝酒词并调用它们时,服务就会启动,但当它们在计时器内时,服务不会启动。谢谢你的帮助 服务类别: public class LocalService extends Service { private static Timer timer = new Timer(); private Context ctx; public IBinder onBind(Intent arg0)
public class LocalService extends Service
{
private static Timer timer = new Timer();
private Context ctx;
public IBinder onBind(Intent arg0)
{
return null;
}
public void onCreate()
{
super.onCreate();
ctx = this;
startService();
}
private void startService()
{
timer.scheduleAtFixedRate(new mainTask(), 0, 5000);
}
private class mainTask extends TimerTask
{
public void run()
{
Toast.makeText(ctx, "test", Toast.LENGTH_SHORT).show();
}
}
public void onDestroy()
{
super.onDestroy();
Toast.makeText(this, "Service Stopped ...", Toast.LENGTH_SHORT).show();
}
}
主要类别:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startService(new Intent(RingerSchedule.this, LocalService.class));
}
Android不允许在主线程之外进行诸如祝酒之类的UI事件。有人在叫跑步,但是祝酒词被忽略了 要在UI线程上创建Toast,可以使用处理程序和空消息,如下所示:
public class LocalService extends Service
{
private static Timer timer = new Timer();
private Context ctx;
public IBinder onBind(Intent arg0)
{
return null;
}
public void onCreate()
{
super.onCreate();
ctx = this;
startService();
}
private void startService()
{
timer.scheduleAtFixedRate(new mainTask(), 0, 5000);
}
private class mainTask extends TimerTask
{
public void run()
{
toastHandler.sendEmptyMessage(0);
}
}
public void onDestroy()
{
super.onDestroy();
Toast.makeText(this, "Service Stopped ...", Toast.LENGTH_SHORT).show();
}
private final Handler toastHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_SHORT).show();
}
};
}
谢谢,我还需要取消计时器
public void onDestroy() {
timer.cancel();
Toast.makeText(this, "ServiceTalkGeology stopped.",
Toast.LENGTH_SHORT).show();
super.onDestroy();
}
我一直在寻找这个答案。你不需要一个带有
WeakReference
的静态处理程序来防止泄漏吗?非常感谢。如何将整数变量而不是毫秒的5000传递到服务中?我希望能够动态/编程地调整计时器间隔。如何停止计时器?