Я знаю, что если я подклассифицирую класс Handler в Android, лучше быть статичным или утечка памяти может произойти. например:Должен ли мой объект Handler быть статическим?
static class MyHandler extends Handler {...}
Но что, если я просто создаю объект класса Handler? например:
Handler mHandler = new Handler();
Должно ли оно быть статическим? как это:
static Handler mHandler = new Handler();
Поскольку по умолчанию обработчик а будет использовать (основной) нить по умолчанию, и будет только один главный поток в процессе. Означает ли это, что mHandler не должен быть нестатическим полем в моем классе компонентов (т. Е. Activity, Receiver, ...)? Спасибо.
------------------ обновление --------------------- спасибо за ваш быстрый ответ. , но все следующие ответы - это не то, что я прошу.
проблема, Объект Handler «присоединяется» к процессу по умолчанию. (технически он прикрепляется к основной резьбе)
, что означает, что его жизненный цикл не связан с деятельностью или приемником.
так, если я делаю это нестатическим полем деятельности, не так ли?
(мой вопрос более «теоретический/логический», а не «практический»)
, и если у вас есть объект экземпляра, у вас есть проблема с ним? – Elltz
см. Https://techblog.badoo.com/blog/2014/08/28/android-handler-memory-leaks и http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory- leak.html и многие другие ответы дяди Google – pskink
@Elltz, да, они разные. Если mHandler не является статическим, он может быть уничтожен, если содержащийся класс (Activity, например) был уничтожен. Но если mHandler статичен, он не будет уничтожен, пока процесс не будет убит. Из-за вышеперечисленных различий они могут/должны обрабатывать различные задачи. – Henry