在说这个问题之前要明确一个知识点:非静态匿名内部类会持有其外部类的隐式引用。
@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 的垃圾回收机制不是万能的。