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”实现。