1.APP运行时发生OOM的原因你知道哪几种?如何避免?

  一是资源对象没关闭造成的内存泄漏,try catch finally 中将资源回收到finally 语句可以有效避免

OOM,资源性对象比如:

1-1 Cursor

1-2调用resigterReceiver()后未调用unregisterRecevier()

1-3未关闭InputStream/OutputStream

1-4Bitmap使用后未调用recycle()

2.作用域不一样,导致对象不能被垃圾回收器回收,比如:

2-1非静态内部类会隐式地持有外部类的引用,

2-2Context泄漏

概括一下,避免context相关的内存泄漏,记住以下事情:

1.不要保留对context actity长时间的引用(对actvity引用的时候,必须确保拥有和activity一样的生命周期。

2.尝试使用context application 来代替Context-Activity

3.如果你不想控制内部类的生命周期,应避免在activity中使用非静态内部类,而应该使用静态的内部类,并在其中创建一个对actvity

 

posted on 2018-02-16 11:42  HE不言  阅读(125)  评论(0编辑  收藏  举报