我正在尝试使用 TimerTask()
和与 postDelayed 相关联的 Handler()
来更新我的通知,每 1 秒运行一次方法任务,但我似乎正在点击从事物的外观来看,一堵墙正确地实现了它。
这是我的代码示例:
Timer timer = new Timer();
TimerTask task = new TimerTask(){
@Override
public void run() {
updateNotificationUi();
}
};
timer.scheduleAtFixedRate(task, 0, 1000);
}
然后是updateNotificationUi()
方法代码:
private void updateNotificationUi() {
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
if(isRunning) {
mNotificationBuilder.setContentTitle("Text").setContentText("This value here updates every 1 sec").setSmallIcon(R.drawable.ic_launcher);
mNotifyManager.notify(notificationID, mNotificationBuilder.build());
}
}
}, 1000);
}
运行我的应用程序时出现的错误是 12-22 07:37:20.556: E/AndroidRuntime(6555): java.lang.RuntimeException: 无法在未调用 Looper 的线程内创建处理程序。准备()
有关如何解决此问题的任何建议?
最佳答案
是的,有一个更优雅的解决方案
您可以像这样将 Handler 和 Runnable 定义为全局变量(注意 runnable 中的“postDelayed”):
Handler myHandler;
Runnable runnable = new Runnable(){
@Override
public void run() {
if(isRunning) {
mNotificationBuilder.setContentTitle("Text").setContentText("This value here updates every 1 sec").setSmallIcon(R.drawable.ic_launcher);
mNotifyManager.notify(notificationID, mNotificationBuilder.build());
myHandler.postDelayed(runnable, 1000);
}
}
};
...
然后在你的方法中开始循环:
private void updateNotificationUi() {
myHandler = new Handler();
myHandler.postDelayed(runnable, 1000);
}
可能你也需要一个停止条件,也许是一个 boolean 标志 arroung "postDelayed"inside runnable。像这样:
if(shouldContinueLooping){
myHandler.postDelayed(runnable, 1000);
}
关于java - 使用具有 Postdelayed 的 Handler 来更新 Notification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27598941/