繁体   English   中英

广播接收器中的 Android 倒数计时器不会更新 TextView

[英]Android Countdown Timer in Broadcast receiver doesn't update TextView

我正在创建适用于 SMS 服务和FTP网络的应用程序。

如果用户没有建立连接,它将在 30 秒后再次尝试重新连接。

我正在使用 CountDownTimer 和 TextView 来通知用户重新连接的剩余时间。

要么成功,要么重新开始计数。

我的问题是,如果计数器在后台活动或屏幕锁定时重新启动,TextView 会一直显示数字“1” (它不会更新),直到计时器在前台再次重新启动(但在没有计时器重启的情况下更新数字可以正常工作)后台或锁定,我在前台服务中使用唤醒锁)。

在应用程序处于前台时计数器再次重新启动(因此它不会停止计数)后,一切都恢复正常,TextView 从冻结的"1"更新为 "30"并开始倒计时到"1"

我认为问题将出在计数器线程和后台活动与 UI 之间的通信中,但我对此一无所知。

我尝试了几件事,例如:

  1. 为毫秒创建 setter 和 getter 并在每个滴答声中更新它们,然后尝试从onReume()更新 textview ,没有工作。
  2. 在计时器内为 TextView 创建局部变量,在onTick()内初始化它并尝试从那里更新文本,也没有工作。

谢谢大家的帮助,我会appriciate任何建议。

与问题相关的部分代码:

private CountDownTimer cdt = null;
private final TextView getTextView_ActivityMainMenu_Timer(){
  return (TextView) findViewById(R.id.ActivityMainMenu_TextView_Timer);
}

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {

    if(intent.getBooleanExtra("KEY_FAILED", false)){

      cdt = new CountDownTimer(30000, 1000) {

        public void onTick(long millisUntilFinished) {          
          getTextView_ActivityMainMenu_Timer().setText("" + millisUntilFinished / 1000);                             
        }

        public void onFinish() {                        
          ;                     
        }

      }
      .start();

    }
    else
    {
      if(cdt != null)
        cdt.cancel();
    }
  }
}; 

最后我找到了这个问题的解决方案。 我没有意识到我正在onPause()方法中取消注册接收器。 所以我不得不改变它并将广播的注册放入onResume()并仅在onDestroy()方法中取消注册。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM