Я начал использовать Leakcanare в моем приложении.
на основе различных источников, я обнаружил, что с этой зависимостью: < /p>
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14'
< /code>
Проседает личинки Следующие компоненты по умолчанию:
active, фрагменты (оба Androidx.fragment.app.fragment и Android.app.fragment), ViewModels, службы, вещательные приемники (особенно динамически зарегистрированные) и View Cools. Итак, я написал следующий код: < /p>
private void setLeakCanaryData() {
if (BuildConfig.DEBUG) {
LeakCanary.Config oldConfig = LeakCanary.getConfig();
List newEventListeners = getEventListeners(oldConfig);
LeakCanary.Config newConfig = new LeakCanary.Config(
oldConfig.getDumpHeap(),
oldConfig.getDumpHeapWhenDebugging(),
oldConfig.getRetainedVisibleThreshold(),
oldConfig.getReferenceMatchers(),
oldConfig.getObjectInspectors(),
oldConfig.getOnHeapAnalyzedListener(),
oldConfig.getMetadataExtractor(),
oldConfig.getComputeRetainedHeapSize(),
oldConfig.getMaxStoredHeapDumps(),
oldConfig.getRequestWriteExternalStoragePermission(),
oldConfig.getLeakingObjectFinder(),
oldConfig.getHeapDumper(),
newEventListeners,
oldConfig.getShowNotifications(),
oldConfig.getUseExperimentalLeakFinders()
);
LeakCanary.setConfig(newConfig);
}
}
private static @NonNull List getEventListeners(LeakCanary.Config oldConfig) {
List newEventListeners = new ArrayList(oldConfig.getEventListeners());
newEventListeners.add(event -> {
if (event instanceof EventListener.Event.HeapAnalysisDone) {
HeapAnalysis analysis = ((EventListener.Event.HeapAnalysisDone) event).getHeapAnalysis();
if (analysis instanceof HeapAnalysisSuccess) {
HeapAnalysisSuccess success = (HeapAnalysisSuccess) analysis;
for (ApplicationLeak leak : success.getApplicationLeaks()) {
sendLogInfo("Application Leak: " + leak.toString());
}
for (LibraryLeak leak : success.getLibraryLeaks()) {
sendLogInfo("Library Leak: " + leak.toString());
}
} else if (analysis instanceof HeapAnalysisFailure) {
HeapAnalysisFailure failure = (HeapAnalysisFailure) analysis;
sendLogInfo("Heap analysis failed: " + failure.getException().getMessage());
}
}
});
return newEventListeners;
}
< /code>
Мои вопросы: < /p>
Это правильный и рекомендуемый способ записи утечек памяти с использованием
leakcanary? /> < /li>
< /ol>
Любая помощь или предложения приветствуются. Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/797 ... tom-logger
Leakcanary: Как регистрировать утечки памяти с помощью пользовательского регистратора? ⇐ Android
Форум для тех, кто программирует под Android
1753085641
Anonymous
Я начал использовать Leakcanare в моем приложении.
на основе различных источников, я обнаружил, что с этой зависимостью: < /p>
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14'
< /code>
Проседает личинки Следующие компоненты по умолчанию:
active, фрагменты (оба Androidx.fragment.app.fragment и Android.app.fragment), ViewModels, службы, вещательные приемники (особенно динамически зарегистрированные) и View Cools. Итак, я написал следующий код: < /p>
private void setLeakCanaryData() {
if (BuildConfig.DEBUG) {
LeakCanary.Config oldConfig = LeakCanary.getConfig();
List newEventListeners = getEventListeners(oldConfig);
LeakCanary.Config newConfig = new LeakCanary.Config(
oldConfig.getDumpHeap(),
oldConfig.getDumpHeapWhenDebugging(),
oldConfig.getRetainedVisibleThreshold(),
oldConfig.getReferenceMatchers(),
oldConfig.getObjectInspectors(),
oldConfig.getOnHeapAnalyzedListener(),
oldConfig.getMetadataExtractor(),
oldConfig.getComputeRetainedHeapSize(),
oldConfig.getMaxStoredHeapDumps(),
oldConfig.getRequestWriteExternalStoragePermission(),
oldConfig.getLeakingObjectFinder(),
oldConfig.getHeapDumper(),
newEventListeners,
oldConfig.getShowNotifications(),
oldConfig.getUseExperimentalLeakFinders()
);
LeakCanary.setConfig(newConfig);
}
}
private static @NonNull List getEventListeners(LeakCanary.Config oldConfig) {
List newEventListeners = new ArrayList(oldConfig.getEventListeners());
newEventListeners.add(event -> {
if (event instanceof EventListener.Event.HeapAnalysisDone) {
HeapAnalysis analysis = ((EventListener.Event.HeapAnalysisDone) event).getHeapAnalysis();
if (analysis instanceof HeapAnalysisSuccess) {
HeapAnalysisSuccess success = (HeapAnalysisSuccess) analysis;
for (ApplicationLeak leak : success.getApplicationLeaks()) {
sendLogInfo("Application Leak: " + leak.toString());
}
for (LibraryLeak leak : success.getLibraryLeaks()) {
sendLogInfo("Library Leak: " + leak.toString());
}
} else if (analysis instanceof HeapAnalysisFailure) {
HeapAnalysisFailure failure = (HeapAnalysisFailure) analysis;
sendLogInfo("Heap analysis failed: " + failure.getException().getMessage());
}
}
});
return newEventListeners;
}
< /code>
Мои вопросы: < /p>
Это правильный и рекомендуемый способ записи утечек памяти с использованием
leakcanary? /> < /li>
< /ol>
Любая помощь или предложения приветствуются. Спасибо!
Подробнее здесь: [url]https://stackoverflow.com/questions/79704504/leakcanary-how-to-log-memory-leaks-using-a-custom-logger[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия