我可以在服务中使用startForeground(id,notification)来正确更新通知进度栏吗?

时间:2019-09-01 15:07:30

标签: java android android-service android-notifications notificationmanager

我有一种情况,我需要在几毫秒后更新通知进度栏。如果我使用通知管理器更新进度,那么即使调用了我不需要的stopForground(true),通知也会显示出来。

以下是使用通知管理器进行更新的示例代码。

private void doStuff() {

    // starting in foreground
    startForeground(123, notification.build());

    final Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            final Handler handler  = new Handler(Looper.getMainLooper());

            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    timer++;
                    if(timer > 10){
                        stopForeground(true);
                        stopSelf();
                        return;
                    }
                    if(!bound){
                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                notificationManager.notify(123, notification.setProgress(10, timer, false).build());
                            }
                        }, 2000);
                    }

                    handler.postDelayed(this, 1000);

                }
            }, 1000);
        }
    });

    thread.start();
}

否则,如果我使用startForground()方式,则通知将在2000毫秒后不显示,并且得到所需的行为,如下所示:

  private void doStuff() {

    // starting in foreground
    startForeground(123, notification.build());

    final Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            final Handler handler  = new Handler(Looper.getMainLooper());

            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    timer++;
                    if(timer > 10){
                        stopForeground(true);
                        stopSelf();
                        return;
                    }
                    if(!bound){
                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                startForeground(123, notification.setProgress(10, timer, false).build());
                            }
                        }, 2000);
                    }

                    handler.postDelayed(this, 1000);

                }
            }, 1000);
        }
    });

    thread.start();
}

我的问题是是否会因为我从未见过有人这样做而导致我不知道使用这种方式是否有问题。请帮忙!谢谢!

0 个答案:

没有答案