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