Android 当活动被破坏时,如何完全释放内存?

Android 当活动被破坏时,如何完全释放内存?,android,android-studio,kotlin,out-of-memory,Android,Android Studio,Kotlin,Out Of Memory,“详细信息”活动有3个片段提供选项卡式视图,其中一个选项卡可以保存应用程序从API下载的图像,并将其转换为位图,以将其设置为旋转木马行中的图像视图 当我返回到主活动时,DetailActivity将进入onPause()状态,并且不会释放内存,因此如果我多次输入和退出detail activity,应用程序将崩溃 这是我用来返回主活动的代码,如果我使用This.finish()方法,它也不会释放内存 override fun onOptionsItemSelected(item: Men

“详细信息”活动有3个片段提供选项卡式视图,其中一个选项卡可以保存应用程序从API下载的图像,并将其转换为位图,以将其设置为旋转木马行中的图像视图


当我返回到主活动时,DetailActivity将进入onPause()状态,并且不会释放内存,因此如果我多次输入和退出detail activity,应用程序将崩溃

这是我用来返回主活动的代码,如果我使用This.finish()方法,它也不会释放内存

    override fun onOptionsItemSelected(item: MenuItem?): Boolean {
        when(item?.itemId) {
            android.R.id.home -> {
                setResult(Activity.RESULT_CANCELED)
                this.onBackPressed()
                finishActivity(Activity.RESULT_CANCELED)
                return true
            }
        }
        return super.onOptionsItemSelected(item)
    }


如何使应用程序销毁将活动发送到onPause()状态的详细活动安装中使用的所有资源。

我很确定,您无法在Android中手动释放内存。垃圾收集器对所有没有活动链接的对象执行此操作。“当我返回到主活动时,DetailActivity将进入onPause()状态”--使用
finish()
,您的活动将依次使用
onPause()
onStop()
onDestroy()
快速调用。“因此,如果我多次输入和退出详细信息活动,应用程序就会崩溃”——您正试图在单个块中分配19834892字节的内存。这是巨大的,比您应该尝试分配的要大得多,特别是当您需要多个图像时。加载图像时,需要考虑图像视图的大小。Glide和毕加索帮你处理这个问题。你使用的是像毕加索或Glide这样的图像加载库吗?如果没有,您应该考虑这样做,因为他们非常擅长以最少的内存使用加载图像。如果您使用
finishActivity
结束当前活动,您不应该这样做。状态为finishActivity()用于强制完成另一个活动。所以你应该
finish()。垃圾收集器对所有没有活动链接的对象执行此操作。“当我返回到主活动时,DetailActivity将进入onPause()状态”--使用
finish()
,您的活动将依次使用
onPause()
onStop()
onDestroy()
快速调用。“因此,如果我多次输入和退出详细信息活动,应用程序就会崩溃”——您正试图在单个块中分配19834892字节的内存。这是巨大的,比您应该尝试分配的要大得多,特别是当您需要多个图像时。加载图像时,需要考虑图像视图的大小。Glide和毕加索帮你处理这个问题。你使用的是像毕加索或Glide这样的图像加载库吗?如果没有,您应该考虑这样做,因为他们非常擅长以最少的内存使用加载图像。如果您使用
finishActivity
结束当前活动,您不应该这样做。状态为finishActivity()用于强制完成另一个活动。因此,您应该改为
finish()