java - 使用具有 Postdelayed 的 Handler 来更新 Notification

标签 java android

我正在尝试使用 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/

相关文章:

Java - 确保集合中的项目只能使用一次

java - 如何从多选 ListView 警报对话框中获取值

android - 创建自定义 LinearLayout 并用 View 填充它

Android 可点击 TextView 如何在文本上创建多个点击区域并捕捉区域选择

c# - 应用程序关闭时无法在 Xamarin.Android 中接收远程通知

java - 凯撒密码 Java 程序无法移位超过 23

java - Spring 安全 : AuthenticationProvider and UserDetailsService not working as expected

java - 大O 方法的复杂性

java - 为什么我的 JTable 将显示在新的 JFrame 上,而不是显示在现有的 JPanel 上?

安卓。如何让时区看起来像 GMT-0X :00?