我有一个应用程序启动一个不断更新通知栏的服务。通知显示服务的状态。该服务被写入休眠一段时间,然后在后台执行一些工作,然后重复。因此,我的通知是这样的字符串:
空闲 (3)
空闲 (2)
空闲 (1)
在职的
空闲 (3)
...
这一切都很好,我看到的问题是,经过长时间的运行,android进程的CPU使用率增加了,特别是:
com.android.systemui
我通过 adb 控制台使用“top”。当我第一次启动应用程序时,它显示 com.android.systemui 的 CPU% 为 0~5%。30 分钟后,CPU% 约为 80%。
在我的课堂上,我有以下代码: private NotificationManager _notificationManager; 私人通知_通知;私人 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;
}
}
我不知道为什么会发生这种情况。为了解决这个问题,我提出了一种解决方法,将在工作完成后清除通知,然后将其放回原处,这似乎已经“解决”了这个问题。当然,唯一的问题是每次工作完成时通知都会消失并重新出现。