«

activity中线程的谨慎使用

时间:2024-3-2 17:02     作者:韩俊     分类: Html+Css


在说这个问题之前要明确一个知识点:非静态匿名内部类会持有其外部类的隐式引用。

      @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 的垃圾回收机制不是万能的。


标签: javascript html css

热门推荐