static导致的内存泄漏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MainActivity extends AppCompatActivity {

private static Bitmap sBitmap;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// 假设这是一个很大的Bitmap对象,可能由于资源管理不当导致泄露
sBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.large_image);
}

// 假设这是一个可能导致泄露的方法
public void leakMemory() {
// 这里的内存泄露是因为静态变量持有Activity的引用
sBitmap = ((BitmapDrawable) getDrawable(R.drawable.large_image)).getBitmap();
}
}

handler导致的内存泄漏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import android.os.Handler;
import android.os.Message;

public class SampleActivity extends Activity {
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// 处理消息
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Activity 的创建逻辑...

// 发送一个消息,将在未来某个时刻处理
mHandler.sendMessageDelayed(Message.obtain(), 1000);
}

@Override
protected void onDestroy() {
super.onDestroy();
// 如果 Activity 销毁,取消所有未处理的消息
mHandler.removeCallbacksAndMessages(null);
}
}