activity中线程的谨慎使用 Dear 丶 2022-08-08 09:10 100阅读 0赞 在说这个问题之前要明确一个知识点:非静态匿名内部类会持有其外部类的隐式引用。 @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 的垃圾回收机制不是万能的。**
还没有评论,来说两句吧...