在说这个问题之前要明确一个知识点:非静态匿名内部类会持有其外部类的隐式引用。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); new Thread() { @Override public void run() { while (true) { SystemClock.sleep(1000); } } }.start(); }
这种情况,就会出现activity一直存在,因此在多次横屏竖屏之后,内存就是出现危险。
解决办法:线程类声明为私有的静态内部类
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); exampleTwo(); } private void exampleTwo() { new MyThread().start(); } private static class MyThread extends Thread { @Override public void run() { while (true) { SystemClock.sleep(1000); } } } }
因此:
1,尽可能使用静态内部类。
2,Java 的垃圾回收机制不是万能的。