通知バーを継続的に更新するサービスを開始するアプリがあります。通知には、サービスの状態が表示されます。このサービスは、一定期間スリープしてから、バックグラウンドでいくつかの作業を行ってから繰り返すように記述されています。そのため、私の通知は次のような文字列です。
アイドル(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;
}
}
なぜこれが起こっているのか、私は途方に暮れています。これに対抗するために、作業が完了した後に通知をクリアしてから元に戻すという回避策を設定しました。これにより、問題が「修正」されたようです。もちろん、唯一の問題は、作業が完了するたびに通知が消えて再表示されることです。