2011-07-10 153 views
0

我正在實施一項服務,在Android啓動時啓動,它應該每隔10分鐘掃描附近的藍牙設備。當它發現設備時,它會做一些工作。此外,這種週期性的掃描應該在設備開機的整個過程中進行。我想安排一個TimerTask,但我不明白如何使用它。我想它應該啓動這個服務,並讓服務完成這項工作,而不是在TimerTask的run方法中編寫代碼?我如何從TimerTask啓動服務,因爲這似乎是解決我的問題的最簡單方法,但TimerTask是java.util的一部分,而不是Android的一個類。TimerTask Android藍牙

我剛剛找到Android的AlarmManager。我應該使用它嗎?它可以啓動一項服務嗎?


到目前爲止,我有這個,但我需要幫助:

class Timer extends Service 
{ 
    private Handler 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擴展服務 {}

對不起,我不明白的格式是如何在這裏工作。

我需要重寫Service中的onDestroy()嗎?我在哪裏使用stopService()?

回答

0

您需要:將從你的活動之一,和/或設備啓動後開始

  1. 寫服務。
  2. 在您的onStart/onStartCommand服務中,您需要安排使用HandlerAlaramManager定期更新。

在這種情況下HandlerAlarmManager之間的區別是:當設備處於深度睡眠Handler將無法​​運行,同時可以配置AlaramManager喚醒設備和運行代碼。

我建議你去與Handler,因爲它更容易,因爲你說你只需要在喚醒設備來運行代碼。

還有一件事,Handler不使用額外的線程,而TimerTask。這在Android上被認爲是糟糕的做法,只能在線程上浪費時間。

如何使用Handler重複任務的示例代碼可以在這裏找到:Repeat a task with a time delay?

+0

我不知道處理程序可以管理我的時間。我將不得不再看看這一點。我只以爲它從一個班級發送消息到另一個班級。 – user817129

+0

好的,我將使用Handler和Runnable。所以,我在Runnable中實現run()方法,然後我可以調用startActivity()?或者如何讓服務啓動? – user817129