Android线程使用不当引起的内存泄露


在Android里,Thread使用不当会引起内存泄露,以下是示例

  1. package com.examples.testAndroid;   
  2. public class ThreadLeaksTest   
  3. {   
  4.     myRunnable m_runnable;   
  5.        
  6.     public void test(){   
  7.         //OK--1   
  8.         m_runnable = new myRunnable();   
  9.         new Thread(){   
  10.             public void run(){   
  11.                 ThreadLeaksTest.this.run();   
  12.             }   
  13.         }.start();   
  14.         //OK-1--END   
  15.            
  16.         //OK--2   
  17.         m_runnable = new myRunnable();   
  18.         new Thread(){   
  19.             public void run(){   
  20.                 ThreadLeaksTest.this.m_runnable.run();   
  21.             }   
  22.         }.start();   
  23.         //OK-2--END   
  24.            
  25.         //OK-3   
  26.         new myThread().start();   
  27.         //OK-3--END   
  28.            
  29.         //memory leaks-1   
  30.         new Thread(new myRunnable()).start();   
  31.         //memory leaks-1--END   
  32.            
  33.         //memory leaks-2   
  34.         new Thread(){   
  35.             public void run(){   
  36.                 ThreadLeaksTest.this.run();   
  37.             }   
  38.         }.run();   
  39.         //memory leaks-2--END   
  40.            
  41.         //memory leaks-3   
  42.         new Thread(){   
  43.             public void run(){   
  44.                 ThreadLeaksTest.this.m_runnable.run();   
  45.             }   
  46.         }.run();   
  47.         //memory leaks-3--END   
  48.     }   
  49.        
  50.     private void run(){   
  51.            
  52.     }   
  53.        
  54.     static class myRunnable implements Runnable{   
  55.         String[] m_data = new String[10000];   
  56.            
  57.         public void run(){   
  58.             m_data = null;   
  59.         }   
  60.     }   
  61.        
  62.     static class myThread extends Thread{   
  63.         String[] m_data = new String[10000];   
  64.            
  65.         public void run(){   
  66.             m_data = null;   
  67.         }   
  68.     }   
  69. }  

相关内容