使用“暂停”和“恢复”选项从后台服务的文本视图中设置运行计时器



我已经通过秒表类创建了一个计时器,并在活动中成功实现了它。但是我想在关闭应用程序后继续计时器,所以我使用了 Service 并将方法放在其中。如下所示:

我的服务.java:

    Stopwatch stopwatch = Stopwatch.createStarted();
    String workingTime1 = "";
    void startThreadUpdateTimer() {
    final DecimalFormat format = new DecimalFormat("00");
    Timer T = new Timer();
    T.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    workingTime1 = "Your effort is "
                            + format.format(Double.valueOf(stopwatch
                                    .elapsed(TimeUnit.HOURS)))
                            + ":"
                            + format.format(Double.valueOf(stopwatch
                                    .elapsed(TimeUnit.MINUTES)))
                            + ":"
                            + format.format(Double.valueOf(stopwatch
                                    .elapsed(TimeUnit.SECONDS)))
                            + " till now for the day";
                    SwipePage.efforttimer.setText(workingTime1);
                }
            });
        }
    }, 1000, 1000);
}
void runOnUiThread(Runnable runnable) {
    handler.post(runnable);
}

efforttimer 是我想在其中显示我的努力时间的文本视图。我认为绑定服务或广播接收器将在这里有所帮助。实施多种方法,但尚未成功。

所有的帮助和建议大多是可观的。

谢谢

LocalBroadcastManager将是最简单的解决方案。

MyService中,您将需要以下代码:

public class MyService extends Service {
    public static final String ACTION_UPDATE = "MyServiceACTION_UPDATE";
    ...
    private void updateEmitterMethod() {
        LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent(ACTION_UPDATE));
    }
}

在健身记录中,您将拥有:

private BroadcastReceiver mMyServiceUpdateReciever;
...
@Override
public void onResume() {
    super.onResume();
    mMyServiceUpdateReciever = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                onUpdateMethod();
            }
        };
    LocalBroadcastManager.getInstance(this).registerReceiver(mMyServiceUpdateReciever, new IntentFilter(MyService.ACTION_UPDATE));
}
@Override
public void onPause() {
    super.onPause();
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMyServiceUpdateReciever);
}

最新更新