Если вы генерируете уведомление из службы, запущенной на переднем плане, используя
startForeground(NOTIFICATION_ID, notificationBuilder.build());
, то выдача
notificationManager.cancel(NOTIFICATION_ID);
не отменяет уведомление, а уведомление появляется в строке состояния. В этом конкретном случае вам нужно будет выдать
stopForeground( true );
из службы, чтобы вернуть его в фоновый режим и одновременно отменить уведомления. В качестве альтернативы вы можете нажать его на задний план, не отменяя уведомление и затем отменив уведомление.
stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
Как эта конкретная очередь приоритетов реализована, вы должны позвонить heap.Init
после того, как вы поместили свои элементы в очередь, как показывает оригинальный пример.
pq := make(PriorityQueue, 0)
pq.Push(&Item{value: "0", priority: 0, index: 0})
item := &Item{value: "1", priority: 10, index: 1}
pq.Push(item)
item = &Item{value: "2", priority: 20, index: 2}
pq.Push(item)
item = &Item{value: "3", priority: 5, index: 3}
pq.Push(item)
heap.Init(&pq)
fmt.Println(heap.Pop(&pq).(*Item))
fmt.Println(heap.Pop(&pq).(*Item))
fmt.Println(heap.Pop(&pq).(*Item))
fmt.Println(heap.Pop(&pq).(*Item))
Распечатает элементы в приоритетном порядке, как и ожидалось.