一、静态变量持有
public class MainActivity extends Activity{
private static final String TAG = "MainActivity";
private static Context sContext;
private static View sView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//这里直接把当前Activity赋值给了静态变量sContext
sContext = this;
//这种写法和上面的类似
sView = new View(this);
}
}
二、单例模式造成
public class DisplayUtils {
private static volatile DisplayUtils instance = null;
private Context mContext;
private DisplayUtils(Context context){
this.mContext = context;
}
public static DisplayUtils getInstance(Context context){
if (instance != null){
synchronized (DisplayUtils.class){
if (instance !=null){
instance = new DisplayUtils(context);
}
}
}
return instance;
}
public int dip2px(float dpValue) {
final float scale =
mContext.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
}
三、非静态内部类创建静态实例可能造成的内存泄漏
public class NonStaticActivity extends AppCompatActivity {
private static Config sConfig;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_non_static);
//Config类并不是静态类,
sConfig = new Config();
}
class Config {
}
}
四、webview造成内存泄漏
对于使用Android的WebView造成的内存泄漏。我在此建议使
用https://github.com/delight-im/Android-AdvancedWebView,
使用这个优化后的WebView,按照提示进行操作。
五、Handler造成内存泄漏
其他原因造成的内存泄漏
造成内存泄漏的原因有很多,我们这里只是列举了其中比较典
型的几种,当然还有好多原因会造成内存泄漏,比如资源开启
但是未关闭、多线程等等等等。
@Override
protected void onDestroy() {
super.onDestroy();
mHandler.removeCallbacksAndMessages(null);
mHandler = null;
}
六、其他原因造成的内存泄漏
造成内存泄漏的原因有很多,我们这里只是列举了其中比较典
型的几种,当然还有好多原因会造成内存泄漏,比如资源开启
但是未关闭、多线程等等等等。
网友评论