gpt4 book ai didi

java - 链接 Activity 会导致 OOM

转载 作者:行者123 更新时间:2023-12-02 10:28:24 26 4
gpt4 key购买 nike

我的任务是维护一个应用程序,该应用程序为用户所做的任何事情打开一个单独的 Activity 。是的,这是一个旧应用程序,我计划很快对其进行升级。

在分析过程中,我发现打开相同的 Activity (不同的数据和所有数据)时,图形内存占用大量内存。

我使用标准的 recyclerview 和一个名为 rv-joiner 的库来实现多适配器,并使用 Glide 来加载图像。

问题是,我尝试清空recyclerview并清除Pause上的数据,希望内存能够清理干净,但没有成功。

我也尝试使用Glide.get(context).clearMemory(),结果相同。

有什么改进内存管理的建议吗?

布局:

<?xml version="1.0" encoding="utf-8"?>

<data>

</data>


<android.support.design.widget.CoordinatorLayout
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/backgroundColor"
android:fitsSystemWindows="true"
android:layoutDirection="ltr"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

<android.support.design.widget.AppBarLayout
android:id="@+id/applicationBar"
android:layout_width="match_parent"
android:layout_height="@dimen/app_bar_height"
android:background="@null"
android:layoutDirection="ltr"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:minHeight="0dp"
android:textAlignment="viewStart"

app:contentScrim="@color/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed|enterAlwaysCollapsed">

<ImageView
android:id="@+id/post_cover"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:background="@null"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
android:tint="#66000000"
app:layout_collapseMode="parallax" />


<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:alpha="1.0"
android:background="#00000000"
android:minHeight="56dp"
android:theme="@style/toolBarStyle"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/toolbar_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="23dp"
android:ellipsize="end"
android:maxLines="1"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/white"
android:textDirection="ltr"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/action_share"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<ImageView
android:id="@+id/action_favorite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:padding="8dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<ImageView
android:id="@+id/action_share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"

android:layout_marginBottom="8dp"
android:padding="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/action_favorite"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_action_share" />


</android.support.constraint.ConstraintLayout>


</android.support.v7.widget.Toolbar>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

<android.support.v7.widget.RecyclerView
android:id="@+id/rv_post"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior">


</android.support.v7.widget.RecyclerView>

<ProgressBar
android:id="@+id/loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</android.support.design.widget.CoordinatorLayout>

最佳答案

  1. 清空回收器 View 是不合理的,因为它在默认设置下仅使用 5-8 个 View 。也许每个观点都相当沉重。只需用一个、两个、三个等项目填充适配器,然后看看它消耗了多少内存。
  2. Glide 是一个很棒的图像处理库(不仅仅是图像下载器),因此请充分利用它的所有功能。您可以从对图像进行下采样并更改其大小开始。接下来 - 检查是否有任何位图。它们会消耗大量内存,因此最好将它们转换为可绘制对象之类的东西。
  3. Lottie 和其他动画处理库。我在我的一个项目中使用了lottie,我注意到较重的动画是UI 较慢的。因此,如果您有一个 - 将动画的 json 减少到最大 50 kb。
  4. 多线程和并发。根据我的经验,我可以说很多开发人员在 UI 线程上做了太多工作。将业务逻辑和 UI 逻辑分开,以避免 UI 缓慢。最好将 MVVM 模式与 Android Jetpack 结合使用。
  5. 流。关闭 onPause() 中的所有流(包括游标等),因为它们会消耗大量进程资源。
  6. 上下文。只是不要将您的上下文存储在应用程序中的任何位置。
  7. 使用大堆。将 android:largeheap="true"添加到 list 中的应用程序标记中。

这是一般规则,但如果我是你,我会简单地放置大量断点并在每个执行行之后监视内存消耗。

关于java - 链接 Activity 会导致 OOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53756290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com