0

我正在实现一个在 Android 启动时启动的服务,它应该每 10 分钟扫描一次附近的蓝牙设备。当它发现设备时,它会做一些工作。此外,这种定期扫描应该在设备开启的整个过程中进行。我正在尝试安排 TimerTask,但我不明白如何使用它。我猜它应该启动这个服务并让服务完成工作,而不是在 TimerTask 的 run 方法中编写代码?我将如何从 TimerTask 启动服务,因为这似乎是解决我的问题的最简单方法,但 TimerTask 是 java.util 的一部分,而不是 Android 的类之一。

我刚刚找到了 Android 的 AlarmManager。我应该用那个吗?它可以启动服务吗?


到目前为止,我有这个,但我需要帮助:

类 Timer 扩展服务
{
    私人处理程序 myHander;

Runnable r = new Runnable()
{
    run()
    {
        startService(new Intent(Timer.this.getApplicationContext() ,MyService.class));

myHandler.postDelayed(r,10 分钟); } }

onCreate()
{   
    myHandler=new MyHandler();

}   

onStartCommand()
{
    //Do the bluetooth work.

r.run(); }

onDestroy() { super.onDestroy(); myHandler.removeCallback(r); }

} 类 MyService 扩展服务 { }

抱歉,我不明白这里的格式是如何工作的。

我需要覆盖服务中的 onDestroy() 吗?我在哪里使用 stopService() ?

4

1 回答 1

0

你需要:

  1. 编写将从您的一项活动和/或设备启动后启动的服务。
  2. 在您的服务中onStart/onStartCommand您需要安排使用HandlerAlaramManager定期更新。

HandlerAlarmManager在这种情况下 的区别在于:Handler当设备处于深度睡眠时不会运行,而您可以配置AlaramManager唤醒设备并运行您的代码。

我建议使用Handler,因为它更容易,因为你说你只需要在设备唤醒时运行你的代码。

还有一件事,Handler不使用额外的线程TimerTask。这被认为是在 Android 上浪费线程仅用于计时器的一种不好的做法。

Handler可以在此处找到如何使用重复任务的示例代码: Repeat a task with a time delay?.

于 2011-07-10T08:23:10.153 回答