2

我有一个应用程序启动一个不断更新通知栏的服务。通知显示服务的状态。该服务被写入休眠一段时间,然后在后台执行一些工作,然后重复。因此,我的通知是这样的字符串:

空闲 (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;
    }
}

我不知道为什么会发生这种情况。为了解决这个问题,我提出了一种解决方法,将在工作完成后清除通知,然后将其放回原处,这似乎已经“解决”了这个问题。当然,唯一的问题是每次工作完成时通知都会消失并重新出现。

4

1 回答 1

2


在更新相同通知以显示进度
和性能时查看巨大的内存使用情况
: csipsimple 在注册时触发周期性 CPU 峰值

于 2011-12-25T14:45:12.243 回答