Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix memory leak #43

Closed
hss01248 opened this issue Apr 11, 2017 · 10 comments · Fixed by #76
Closed

fix memory leak #43

hss01248 opened this issue Apr 11, 2017 · 10 comments · Fixed by #76
Labels

Comments

@hss01248
Copy link

GlideProgressSupport.DispatchingProgressListener.LISTENERS静态变量,即使调用forget方法,还是会导致承载BigImageView的activity不能释放,造成内存泄漏.
我是用eventbus来解决的,如下:

https://github.com/hss01248/ImageLoader/blob/master/image/src/main/java/com/github/piasy/biv/view/BigImageView.java
https://github.com/hss01248/ImageLoader/blob/master/glideloader/src/main/java/com/hss01248/glideloader/big/GlideProgressSupport.java

用jdk里的订阅者也可以,就是有点繁琐.

@Piasy
Copy link
Owner

Piasy commented Apr 23, 2017

我用 LeakCanary 试了一下,并没有复现你所说的这个问题,倒是遇见了 square/leakcanary#696 这个问题。

不知你是怎么确定我这里有内存泄漏的?

@Juziwsw
Copy link

Juziwsw commented Apr 28, 2017

这个地方确实有内存泄露的情况,比较严重

@wanghaihui
Copy link

的确 我Redmi Note 3也遇到了

@Piasy
Copy link
Owner

Piasy commented May 5, 2017

抱歉各位,我近期没什么精力排查这边的问题,希望有朋友能帮忙排查解决,提交 pr :)

@yigepang
Copy link

yigepang commented Jul 6, 2017

的确有问题,内存泄漏
java.lang.OutOfMemoryError: Failed to allocate a 3126652 byte allocation with 905352 free bytes and 884KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:639)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:615)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:391)
at com.davemorrissey.labs.subscaleview.decoder.SkiaImageDecoder.decode(SkiaImageDecoder.java:61)
at com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView$BitmapLoadTask.doInBackground(SubsamplingScaleImageView.java:1688)
at com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView$BitmapLoadTask.doInBackground(SubsamplingScaleImageView.java:1662)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)

@yigepang
Copy link

yigepang commented Jul 7, 2017

以上问题是通过glide初始化导致,换成fresco初始化就好了

@Piasy Piasy added the bug label Oct 2, 2017
@Piasy Piasy changed the title 严重的内存泄漏问题 fix memory leak Oct 2, 2017
@hero0812
Copy link

10-11 17:07:15.004 7406-7406/com.binbin.university E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.binbin.university, PID: 7406
java.lang.OutOfMemoryError: Failed to allocate a 4665612 byte allocation with 3646864 free bytes and 3MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:831)
at android.graphics.Bitmap.createBitmap(Bitmap.java:808)
at android.graphics.Bitmap.createBitmap(Bitmap.java:775)
at android.graphics.drawable.VectorDrawable$VectorDrawableState.createCachedBitmapIfNeeded(VectorDrawable.java:834)
at android.graphics.drawable.VectorDrawable.draw(VectorDrawable.java:318)
at android.widget.ImageView.onDraw(ImageView.java:1246)
at com.previewlibrary.wight.SmoothImageView.onDraw(SmoothImageView.java:155)
at android.view.View.draw(View.java:16195)
at android.view.View.updateDisplayListIfDirty(View.java:15192)
at android.view.View.draw(View.java:15965)
at android.view.ViewGroup.drawChild(ViewGroup.java:3610)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400)
at android.view.View.draw(View.java:16198)
at android.view.View.updateDisplayListIfDirty(View.java:15192)
at android.view.View.draw(View.java:15965)
at android.view.ViewGroup.drawChild(ViewGroup.java:3610)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400)
at android.view.View.draw(View.java:16198)
at android.support.v4.view.ViewPager.draw(ViewPager.java:2443)
at android.view.View.updateDisplayListIfDirty(View.java:15192)
at android.view.View.draw(View.java:15965)
at android.view.ViewGroup.drawChild(ViewGroup.java:3610)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400)
at android.view.View.updateDisplayListIfDirty(View.java:15187)
at android.view.View.draw(View.java:15965)
at android.view.ViewGroup.drawChild(ViewGroup.java:3610)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400)
at android.view.View.updateDisplayListIfDirty(View.java:15187)
at android.view.View.draw(View.java:15965)
at android.view.ViewGroup.drawChild(ViewGroup.java:3610)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400)
at android.view.View.updateDisplayListIfDirty(View.java:15187)
at android.view.View.draw(View.java:15965)
at android.view.ViewGroup.drawChild(ViewGroup.java:3610)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400)
at android.view.View.draw(View.java:16198)
at com.android.internal.policy.PhoneWindow$DecorView.draw(PhoneWindow.java:2690)
at android.view.View.updateDisplayListIfDirty(View.java:15192)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:281)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:287)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:322)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2620)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2439)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2072)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1112)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6035)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5453)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

@hero0812
Copy link

多图浏览,达到一定数量时,出现OOM,不知该问题该怎么解决?

@Piasy
Copy link
Owner

Piasy commented Oct 11, 2017

多图浏览是怎么实现的?可以分析一下为什么有内存没有释放,进而思考如何解决。

@Piasy
Copy link
Owner

Piasy commented Dec 2, 2017

Please try v1.4.5 :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants