java - 如何使用后台运行的计数器的当前值更新 Activity 的 TextView?

标签 java android service android-activity broadcastreceiver

我有一个计数器,每 1 秒显示增加 1 它在 TextView 中的当前值。

一切正常,直到 Activity 被销毁然后重新创建。 在这些情况下,计数器重置为 0。

我已经读到我必须将计数器的代码放入其中 自定义服务,因此它在后台执行。 然后,我应该传达我的 Activity (其中包含 TextView)与 BroadcastServicer

我已经学习了一些关于 BroadcastReceiver 的教程 但我仍然不知道如何解决这个问题。

你能告诉我正确的方法吗 将 BroadCastReceiver 与服务进行通信 为了更新Activity内的TextView?。

这是迄今为止我的 Activity 代码:

public class CounterActivity extends Activity{
    private long startTime = 0;
    private Handler h = new Handler();
    private TextView tvCounter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_task_list);
        tvCounter = (TextView)findViewById(R.id.tvCounter);

        Runnable run = new Runnable() {

            @Override
            public void run() {
               long millis = System.currentTimeMillis() - startTime;
               int seconds = (int) (millis / 1000);
               int minutes = seconds / 60;
               seconds     = seconds % 60;

               tvCounter.setText(String.format("%d:%02d", minutes, seconds));

               h.postDelayed(this, 500);
            }
        };

        startTime = System.currentTimeMillis();
        h.postDelayed(run, 0);
    }

}

提前致谢!

最佳答案

你可以使用下面的代码保存你的startTime,然后计数器就不会重置~

protected void onSaveInstanceState(Bundle icicle) {
  super.onSaveInstanceState(icicle);
  icicle.putLong("starttime", startTime);
}

public void onCreate(Bundle savedInstanceState) {
  if (savedInstanceState != null){
     startTime = savedInstanceState.getLong("starttime");
  }else{
     startTime = System.currentTimeMillis();
  }
}

关于java - 如何使用后台运行的计数器的当前值更新 Activity 的 TextView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16473588/

相关文章:

android - 是否可以在 AIDL 接口(interface)中使用继承?

android - 如何删除android中服务类中的位置更新?

java - 使用 Spring 从 Controller 层调用存储库和服务

java - android 如何设置viewpager只加载一页和setOffscreenPageLimit()

java - 创建对话框时如何设置模糊背景

java - 如何在unix中显示注册商标符号®

android - Cordova:未找到 Android SDK。确保它已安装。如果不在默认位置,请设置 ANDROID_HOME 环境变量

java - 颜色无法转换为int

java - 运行基础 docker 镜像的 Main 类

android - 如何计算文本字段中的多少行?