我注意到我的应用程序正在泄漏内存.这可以在DDMS中看到,我设法得到一个OutOfMemoryError.
我找到了泄漏的来源.其中一个活动有一个在后台运行的线程.此线程已停止onDestroy().它完成了运行,因为它可以在DDMS中看到.
现在,如果线程启动,则发生泄漏,Activity在被销毁后不会被垃圾收集,因为它被线程引用.如果没有启动线程,一切都还可以.
这是一个简单的例子来证明这一点:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
volatile boolean finished = false;
byte[] memoryEater = new byte[4 * 1024 * 1024];
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while (!finished) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Log.d(getClass().getName(), "Thread finished"); …Run Code Online (Sandbox Code Playgroud)