Android 当活动处于后台时,如何处理位图?

Android 当活动处于后台时,如何处理位图?,android,out-of-memory,android-glide,android-bitmap,Android,Out Of Memory,Android Glide,Android Bitmap,我所处的情况是,您有多个活动具有不同的活动,这些活动显示不同的图像(通常由Glide加载) 假设我们在这样的体系结构中标记.skipMemoryCache(true): 通过这样做(所有活动都是堆叠的,可以通过按“后退”按钮访问),我意识到以下几点: 像OnePlus 3(2016,3岁)这样的手机不会崩溃,但会导致高温和糟糕的用户体验(延迟渲染)。这是OnePlus 3的简介: 像三星s4mini(2013年,6岁)这样的手机不会崩溃,但会停止加载图像 摩托罗拉Moto G(2013年,

我所处的情况是,您有多个活动具有不同的活动,这些活动显示不同的图像(通常由Glide加载)

假设我们在这样的体系结构中标记
.skipMemoryCache(true)

通过这样做(所有活动都是堆叠的,可以通过按“后退”按钮访问),我意识到以下几点:

  • 像OnePlus 3(2016,3岁)这样的手机不会崩溃,但会导致高温和糟糕的用户体验(延迟渲染)。这是OnePlus 3的简介:

  • 像三星s4mini(2013年,6岁)这样的手机不会崩溃,但会停止加载图像

  • 摩托罗拉Moto G(2013年,6岁,略好于三星S4 Mini)等手机将在两三次位图活动后崩溃


现在我的问题是,根据如何避免内存泄漏和OOM(内存不足)错误的指南,我不会找到类似“不要堆叠高资源活动”这样的东西。这是我做错了什么,还是在
onPause()
时活动应该处理一些特殊的事情?

如何“堆叠”活动?是什么阻止他们在后台被销毁?@Pawel我不阻止他们在后台被销毁。的确,Android可以通过杀死这些活动来获取更多的堆,但正如您在图中所看到的,不知何故,它存储了本地数据(位图),而我什么也没做,它没有释放自己。如果我调用finish,它就会释放。此外,Moto G的手机正在崩溃。活动不容易管理。你考虑过使用碎片吗?有了这些,您可以更好地控制生命周期。@tynn假设所有图像都包含在一个片段中,该片段包含在一个活动中。我不喜欢管理片段,因为它们是处理状态的一大难题。此外,我能对碎片做同样的事情吗?我可以显示7个不同图像的片段,然后恢复到原始状态吗?你可以这样做。无论何时返回,图像都应该重新加载。但这正是你所需要的。否则,无论如何,内存中都会有许多位图。关于片段,您可以查看导航组件。它让生活变得非常简单。你如何“堆叠”活动?是什么阻止他们在后台被销毁?@Pawel我不阻止他们在后台被销毁。的确,Android可以通过杀死这些活动来获取更多的堆,但正如您在图中所看到的,不知何故,它存储了本地数据(位图),而我什么也没做,它没有释放自己。如果我调用finish,它就会释放。此外,Moto G的手机正在崩溃。活动不容易管理。你考虑过使用碎片吗?有了这些,您可以更好地控制生命周期。@tynn假设所有图像都包含在一个片段中,该片段包含在一个活动中。我不喜欢管理片段,因为它们是处理状态的一大难题。此外,我能对碎片做同样的事情吗?我可以显示7个不同图像的片段,然后恢复到原始状态吗?你可以这样做。无论何时返回,图像都应该重新加载。但这正是你所需要的。否则,无论如何,内存中都会有许多位图。关于片段,您可以查看导航组件。它让生活变得非常简单。