0

我在调试一个在位图上运行一系列内存密集型操作的 Android 应用程序时遇到了一些问题。从谷歌的调试提示中,我知道

调试器和垃圾收集器目前松散地集成在一起。VM 保证调试器知道的任何对象在调试器断开连接之前不会被垃圾收集。当调试器连接时,这可能会导致对象随着时间的推移而堆积。例如,如果调试器看到一个正在运行的线程,则即使在线程终止后,关联的 Thread 对象也不会被垃圾回收。

不幸的是,这意味着当我的应用程序在发布模式下运行良好时,任何在调试模式下运行的内存密集型线程都将被垃圾收集器忽略并被保留,因此随着越来越多的内存密集型线程被使用,越来越多的内存被使用创建,导致应用程序崩溃,因为它无法分配所需的内存。

有没有办法明确地告诉垃圾收集器应该收集这些线程,或者以其他方式解决这个问题?

4

1 回答 1

0

我最终通过生成一个AsyncTask而不是一个Thread. 垃圾收集器似乎更容易清除 AsyncTasks,因此我能够在调试模式下运行应用程序而不会出现问题。

AsyncTask 是产生后台操作的推荐方式。任何要在后台完成的工作都应该放在任务的doInBackground(Params...)方法中。AsyncTask 通常用于在完成后在 UI 线程上执行操作,但您可以通过简单地将onPostExecute(Result)方法留空或不存在来避免干扰 UI 线程。

于 2013-04-17T18:38:28.503 回答