Приоритетные очереди в GO

Если вы генерируете уведомление из службы, запущенной на переднем плане, используя

startForeground(NOTIFICATION_ID, notificationBuilder.build());

, то выдача

notificationManager.cancel(NOTIFICATION_ID);

не отменяет уведомление, а уведомление появляется в строке состояния. В этом конкретном случае вам нужно будет выдать

stopForeground( true );

из службы, чтобы вернуть его в фоновый режим и одновременно отменить уведомления. В качестве альтернативы вы можете нажать его на задний план, не отменяя уведомление и затем отменив уведомление.

stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
1
задан Jus 21 February 2019 в 14:56
поделиться

1 ответ

Как эта конкретная очередь приоритетов реализована, вы должны позвонить 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))

Распечатает элементы в приоритетном порядке, как и ожидалось.

0
ответ дан Eli Bendersky 21 February 2019 в 14:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: