【发布时间】:2018-03-06 21:57:42
【问题描述】:
我有一个显示在 RecyclerView 中的任务列表。 对于每项任务,我都会展示一个包含以下内容的活动:
- 点击时显示计时器的播放按钮
- 完成按钮表示任务已完成并停止绑定到活动的服务。
- 各种信息
用户可以停止任务以稍后恢复它并同时启动各种任务。
我需要实现一个服务来让每个计时器在任务的生命周期内都在后台运行。
我遵循了这里的指导方针:https://developer.android.com/guide/components/services.html
当用户选择上一个任务时,如何为每个任务创建一个独特的服务并显示计时器(以及经过的时间)。 每秒更新 Activity 的正确方法是什么?
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: ");
}
}
谢谢
【问题讨论】:
标签: android multithreading android-activity binding android-service