gpt4 book ai didi

java - 离开和返回 Activity 后使用计时器 onTick 更新 TextView

转载 作者:行者123 更新时间:2023-11-30 00:48:46 26 4
gpt4 key购买 nike

我正在编写一个锻炼应用程序,并试图在 Train Activity 中实现一个休息计时器。 CountDownTimer 位于 Train 中,当用户按下开始按钮时调用。

public CountDownTimer createTimer(long timerDuration) {

Log.d("new timer duration:", "value: " + timerDuration);
return new CountDownTimer(timerDuration, 1000) {

@Override
public void onTick(long millisUntilFinished) {
int progress = (int) (millisUntilFinished / 1000);
secondsLeftOnTimer = progress; // update variable for rest of app to access

// Update the output text
breakTimerOutput.setText(secondsToString(progress));
}

@Override
public void onFinish() { // Play a beep on timer finish
breakTimerOutput.setText(secondsToString(timerDurationSeconds));
playAlertSound(); // TODO: Fix the delay before playing beep.
}
}.start();
}

只要用户停留在 Train Activity 中,计时器就会工作。如果您切换到另一个 Activity ,计时器将继续在后台运行(仍会发出蜂鸣声),这正是我想要的。但是,如果您返回到 Train Activity ,breakTimerOutput TextView 将不再由 onTick 更新。

当用户重新进入 Train Activity 时,如何将 breakTimerOutput“重新连接”到 onTick

Here is the full code for the activity, just in case.

最佳答案

我想建议将计时器保留在 Service 中,并使用 BroadcastReceiver 接收更新 TextView 中的滴答声 火车 Activity

您需要从 Service 启动 CountDownTimer。因此,在 ServiceonCreate 方法中,您需要初始化一个 LocalBroadcastManager

broadcastManager = LocalBroadcastManager.getInstance(this);

因此,在计时器的每个滴答声(即 onTick 方法)上,您可能会考虑调用这样的函数。

static final public String UPDATE_TIME = "UPDATE_TIME";
static final public String UPDATED_TIME = "UPDATED_TIME";

public void updateTextView(String time) {
Intent intent = new Intent(UPDATE_TIME);
if(time != null)
intent.putExtra(UPDATED_TIME, time);
broadcastManager.sendBroadcast(intent);
}

现在在您的 TrainActivity 中创建一个 BroadcastReceiver

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.copa);
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String time = intent.getStringExtra(YourService.UPDATED_TIME);
// Update your TextView here.
}
};
}

此外,您还需要注册和注销 BroadcastReceiver

@Override
protected void onStart() {
super.onStart();
LocalBroadcastManager.getInstance(this).registerReceiver((receiver),
new IntentFilter(YourService.UPDATE_TIME)
);
}

@Override
protected void onStop() {
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);
super.onStop();
}

关于java - 离开和返回 Activity 后使用计时器 onTick 更新 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41397778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com