从服务中,我显示一个通知。我有以下代码:

    public final static int NOTIFICATION = 1;
    public final static int NOTIFICATION2 = 2;

case NOTIFICATION2:
    builder.setSmallIcon(R.drawable.ic_action_about);
                builder.setContentTitle(context.getString(R.string.app_name));
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        for(int i=0;i<10;i++) {
                            builder.setContentInfo(i+"/"+10);
                            notificationManager.notify(NOTIFICATION2, builder.build());
                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    }
                }).start();
                notificationManager.cancel(NOTIFICATION2);
break;


该代码工作正常,但是当线程完成时,通知仍然保留。为什么?我想取消它,而cancel()不起作用。

最佳答案

因为您启动了显示通知的异步线程,所以将立即调用notificationManager.cancel(NOTIFICATION2);。这意味着您取消通知时尚未显示。

尝试将notificationManager.cancel(NOTIFICATION2);移到run()方法中。

07-24 16:04