У меня есть приложение, которое запускает службу, которая постоянно обновляет панель уведомлений.В уведомлении отображается состояние службы.Служба записывается на период ожидания, затем выполняет некоторую работу в фоновом режиме, а затем повторяется.Таким образом, мои уведомления представляют собой строки типа:
Idle (3)
Idle (2)
Idle (1)
Working
Idle (3)
...
Все это работает хорошо, проблема, с которой я сталкиваюсь, заключается в том, что после длительного периода работы загрузка ЦП увеличиваетсяПроцесс Android, в частности:
com.android.systemui
Я использую "top" через консоль adb.Когда я впервые запускаю приложение, оно показывает CPU% от 0 до 5% для com.android.systemui.Через 30 минут загрузка ЦП составляет ~ 80%.
В моем классе у меня есть следующий код: private NotificationManager _notificationManager;частное уведомление _notification;private CharSequence _lastNotification;
@Override
public void onCreate() {
super.onCreate();
_notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
_notification = createNotification();
}
@Override
public void onDestroy() {
super.onDestroy();
_notificationManager.cancel(getNotificationId());
}
private Notification createNotification() {
final Notification notification = new Notification();
notification.icon = R.drawable.notification_icon;
notification.tickerText = getText(R.string.serviceStarted);
notification.flags |= Notification.FLAG_ONGOING_EVENT;
final RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification_layout);
contentView.setImageViewResource(R.id.imageViewIcon, R.drawable.notification_icon);
contentView.setTextViewText(R.id.textViewAppName, getText(R.string.appName));
notification.contentView = contentView;
return notification;
}
private void updateNotification(CharSequence message) {
if (!message.equals(_lastNotification)) {
_notification.contentView.setTextViewText(R.id.textViewState, message);
_notificationManager.notify(getNotificationId(), _notification);
_lastNotification = message;
}
}
Я не понимаю, почему это может происходить.Чтобы бороться с этим, я добавил обходной путь, который очистит уведомление после завершения работы, а затем вернет его назад, и это, похоже, «решило» проблему.Разумеется, единственная проблема заключается в том, что уведомление исчезает и появляется снова при каждом выполнении работы.