在Activity、fragment使用new Thread导致内存泄漏的解决方法

new Thread(new Runnable() { 
    @Override public void run() { 
  } 
}).start();

以上方法会浪费线程资源,极有可能导致内存泄漏,解决方法有两种:

1.把该线程类声明为私有的静态内部类:

 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);
          }
        }
      }
    }
public class MainActivity extends Activity {
      private MyThread mThread;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        exampleThree();
      }

      private void exampleThree() {
        mThread = new MyThread();
        mThread.start();
      }

      /**
       * 私有的静态内部类不会持有其外部类的引用,使得 Activity 实例不会在配置改变时发生内
       * 存泄漏
       */
      private static class MyThread extends Thread {
        private boolean mRunning = false;

        @Override
        public void run() {
          mRunning = true;
          while (mRunning) {
            SystemClock.sleep(1000);
          }
        }

        public void close() {
          mRunning = false;
        }
      }

      @Override
      protected void onDestroy() {
        super.onDestroy();
        mThread.close();
      }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容