Использование памяти в приложении Android продолжает расти с течением времени (другие категория в Profiler)Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Использование памяти в приложении Android продолжает расти с течением времени (другие категория в Profiler)

Сообщение Anonymous »

Я разрабатываю приложение для Android, которое в первую очередь фокусируется на: < /p>
  • Извлечение деталей из API. Включая:
    • Видео с использованием exoplayer .
    • Изображения с использованием Glide .
    • youtube come, используя веб -сайты и youtube, использующие виды. .
  • Отправка отображаемого содержания в Opensearch.
Когда приложение начинается, память, используя, находится вокруг 200 мк как наблюдается и продемонстрировано. Однако после запуска приложения в течение нескольких часов использование памяти продолжает расти. Профилировщик не показывает утечек памяти (0 leaks ), но категория «Другие» в графике памяти продолжает расти с течением времени. Я прикрепил дерево доминатора из дампа кучи, которое я взял после моего приложения, работающего в течение 3 часов. src = "https://i.sstatic.net/px1ljefg.png"/>

Как я могу определить, что вызывает увеличение в категории
@SuppressLint("SetTextI18n", "SetJavaScriptEnabled")
@OptIn(UnstableApi::class)
fun startLoop() {
// If this partition has video content initially, set up ExoPlayer and attach PlayerView
if (hasVideoInitially) {
val loadControl = DefaultLoadControl.Builder()
.setBufferDurationsMs(
2000, 2000, 1000, 2000
)
.build()

val renderersFactory = DefaultRenderersFactory(context)
.setEnableDecoderFallback(true)

exoPlayer =
ExoPlayer.Builder(context, renderersFactory)
.setLoadControl(loadControl)
.build()
playerView = PlayerView(context).apply {
useController = false
setShutterBackgroundColor(Color.TRANSPARENT)
layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
)
}
playerView?.player = exoPlayer
partitionContainer.addView(playerView)
}

// Create an ImageView for images/PDF
imageView = ImageView(context).apply {
layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
)
scaleType = ImageView.ScaleType.FIT_XY
visibility = GONE
}
partitionContainer.addView(imageView)

// Create a WebView for HTML content
webView = WebView(context).apply {
layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
)
visibility = GONE
settings.javaScriptEnabled = true
settings.domStorageEnabled = true
settings.cacheMode = WebSettings.LOAD_NO_CACHE
settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
WebView.setWebContentsDebuggingEnabled(true)
}
partitionContainer.addView(webView)

// Create a "No Content" TextView but hide it initially
noContentTextView = TextView(context).apply {
text = "No content to play."
textSize = 18f
setTextColor(Color.CYAN)
gravity = Gravity.CENTER
visibility = GONE
}
partitionContainer.addView(noContentTextView)

// Kick off the main loop
scope.launch {
while (isActive) {
try {
// Take a "snapshot" of the current contents under the lock
val snapshot = contentLock.withLock { contentList }

if (snapshot.isEmpty()) {
// If we've *never* played content before, it means we're just waiting for content
// so do nothing special. If we have played content before, show "No content."
if (hasEverPlayedContent) {
// Show the "No content" message
noContentTextView?.visibility = VISIBLE
noContentTextView?.bringToFront()
}
delay(2000)
} else if (snapshot.size == 1 && snapshot[0].contentType.lowercase(Locale.ROOT) == "widget") {

// Display the widget once
displayWidgetIndefinitely(snapshot[0])
// Then break out of the while loop or block the loop.
break
} else {
// Hide "No content" message if it was visible
noContentTextView?.visibility = GONE

// Loop over the snapshot
for (item in snapshot) {
if (!isActive) break // If our scope got canceled mid-loop
if (!hasFiredFirstContentPlayed) {
hasFiredFirstContentPlayed = true
onFirstContentPlayed?.onFirstContentPlayed()
}
hasEverPlayedContent = true
displayContent(item)
}
}
} catch (e: Exception) {
FirebaseCrashlytics.getInstance().recordException(e)
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... y-in-profi
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»