2

我有一個RecyclerView內顯示的任務列表。 對於每一個任務我介紹含有活動:Android服務交互

  • 播放按鈕,點擊後
  • 一個完成按鈕說任務完成並停止綁定到活動的服務,顯示天文臺表。
  • 各種信息

用戶可以停止任務後恢復,並在同一時間推出的各種任務。

我需要實施一項服務,以保證每個天文臺在任務的生命週期中在後臺運行。

我遵循的準則在這裏:https://developer.android.com/guide/components/services.html

如何創建任務的每一個獨特的服務,並顯示計時錶背面(與經過時間)時,由用戶選擇的先前任務。 什麼是逐秒更新活動的正確方法?

public class TaskService extends Service { 
    public static final String TAG = "TASK SERVICE"; 

    public static final String ACTION_TIMER = TaskService.class.getName() + "TIMER"; 

    private IBinder mBinderTask = new TimerTaskBinder(); 

    private Chronometer mChronometer; 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.d(TAG, "onStartCommande: "); 

     mChronometer = new Chronometer(this); 
     mChronometer.setBase(SystemClock.elapsedRealtime()); 
     mChronometer.start(); 

     return START_STICKY; // Will be explicity started and stopped 
    } 


    public String getTimestamp() { 
     long elapsedMillis = SystemClock.elapsedRealtime() - mChronometer.getBase(); 
     int hours = (int) (elapsedMillis/3600000); 
     int minutes = (int) (elapsedMillis - hours * 3600000)/60000; 
     int seconds = (int) (elapsedMillis - hours * 3600000 - minutes * 60000)/1000; 
     int millis = (int) (elapsedMillis - hours * 3600000 - minutes * 60000 - seconds * 1000); 
     return hours + ":" + minutes + ":" + seconds + ":" + millis; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     Log.d(TAG, "onBind: "); 
     return mBinderTask; 
    } 

    public class TimerTaskBinder extends Binder { 
     public TaskService getService() { 
      return TaskService.this; 
     } 
    } 
    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Log.d(TAG, "onDestroy: "); 

    } 
} 

感謝

回答

0

我不會創建一個服務只是爲了跟蹤一個計時器。我建議使用SystemClock.elapsedRealtime()來存儲任務的開始時間和預計停止時間,並且只需在每次回收站視圖變爲可見時將剩餘計算時間設置爲天文臺。

+0

當我理解如何與服務交互時,我打算收集用戶位置和移動等其他數據 –

+0

當您說移動時,是指用戶活動(走路,駕駛等)? –

+0

是GPS監測 –

0

不要爲每個任務創建Service。只需創建一個Service並讓它管理任務列表。

Service,你有多種選擇的Activity之間溝通:

  • 使用BroadcastReceiver。您的Activity會創建一個BroadcastReceiver並偵聽您的Service間隔發送的廣播。 Service調用sendBroadcast()來廣播感興趣的事件。提示:如果您的ActivityService在相同的操作系統進程中運行,則可以使用LocalBroadcastManager(效率更高一點)。
  • 使用綁定Service。根據需要,將Activity綁定到ServiceService可以回撥Activity中的方法。
  • 使用像Green Robot的EventBus庫這樣的「Event Bus」實現。