[英]Android Countdown Timer in Broadcast receiver doesn't update TextView
我正在创建适用于 SMS 服务和FTP网络的应用程序。
如果用户没有建立连接,它将在 30 秒后再次尝试重新连接。
我正在使用 CountDownTimer 和 TextView 来通知用户重新连接的剩余时间。
要么成功,要么重新开始计数。
我的问题是,如果计数器在后台活动或屏幕锁定时重新启动,TextView 会一直显示数字“1” (它不会更新),直到计时器在前台再次重新启动(但在没有计时器重启的情况下更新数字可以正常工作)后台或锁定,我在前台服务中使用唤醒锁)。
在应用程序处于前台时计数器再次重新启动(因此它不会停止计数)后,一切都恢复正常,TextView 从冻结的"1"更新为 "30"并开始倒计时到"1" 。
我认为问题将出在计数器线程和后台活动与 UI 之间的通信中,但我对此一无所知。
我尝试了几件事,例如:
onReume()
更新 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.