Intereting Posts
Индикатор прогресса панели действий и кнопка обновления Не входящая в класс ошибка Android Studio Анализ с помощью входа в Facebook – возможно, поскольку APK v42 или Graph API v2.4 BroadcastReceiver для WALLPAPER_CHANGED вызывает onReceive () несколько раз: Android Как создать API веб-сайта Класс данных Котлина RealmObject Ссылки / значки, которые генерируются в кодебе, не отображаются на некоторых мобильных устройствах ListView прокручивает выбранный элемент Как вызвать функцию javascript непосредственно из активности на Android? Android добавляет простые анимации, а setvisibility (view.Gone) Внешний край строк GridView Получение события, если файл был загружен / добавлен в папку загрузки Служба резервного копирования Android – когда и как часто делать резервную копию? Будет ли TelephonyManger.getDeviceId () возвращать идентификатор устройства для планшетов, таких как вкладка Galaxy …? Нарисуйте 2D-изображение с помощью OpenGL ES 2.0

Утечка памяти Android в службе уведомлений

У меня есть служба, которая создает уведомление, а затем периодически обновляет его с определенной информацией. Примерно через 12 минут телефон вылетает из строя и перезагружается, я полагаю, что это вызвано утечкой памяти в следующем коде, чтобы сделать, как я обновляю уведомление, может кто-то, пожалуйста, проверьте / посоветуйте мне, если это так, и что я Я делаю неправильно.

OnCreate:

mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 

createNotification:

 private void createNotification() { Intent contentIntent = new Intent(this,MainScreen.class); contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent appIntent =PendingIntent.getActivity(this,0, contentIntent, 0); contentView = new RemoteViews(getPackageName(), R.layout.notification); contentView.setImageViewResource(R.id.image, R.drawable.icon); contentView.setTextViewText(R.id.text, ""); notification = new Notification(); notification.when=System.currentTimeMillis(); notification.contentView = contentView; notification.contentIntent = appIntent; } 

updateNotification:

 private void updateNotification(String text){ contentView.setTextViewText(R.id.text, text); mNotificationManager.notify(0, notification); } 

Заранее спасибо.

Solutions Collecting From Web of "Утечка памяти Android в службе уведомлений"

Я наткнулся на ту же проблему. Похоже, что если вы не «кешируете» RemoteView и Notification в службе, но воссоздаете их с нуля в «обновлении», эта проблема исчезает. Да, я знаю, что это не эффективно, но, по крайней мере, телефон не перезагружается из-за ошибок в памяти.

У меня была такая же проблема. Мое решение близко к тому, которое сказал @haimg, но я кэширую уведомление (только RemoteView воссоздается). Таким образом, уведомление не будет мигать, если вы смотрите на него.

Пример:

 public void createNotification(Context context){ Notification.Builder builder = new Notification.Builder(context); // Set notification stuff... // Build the notification notification = builder.build(); } public void updateNotification(){ notification.bigContentView = getBigContentView(); notification.contentView = getCompactContentView(); mNM.notify(NOTIFICATION_ID, notification); } 

И в методах getBigContentView и getCompactContentView я возвращаю новые RemoteViews с обновленным макетом.