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 に答える