如何解决在退出Activity后GLTextureView无法自动回收
icebuf opened this issue · comments
Ice_Tang commented
使用您的Demo,和AS自带的分析器观察:在退出应用后,系统自动gc了两次,但是还是有很大一部分内存未被回收,dump后发现未被回收的主要是TextureView里mCanvas的Bitmap对象,求教如何解决这个问题。
ChillingVan commented
请问你看的是哪个界面?除了OffScreenActivity忘了onResume onPause外,其它基本上都能看到内存已经回收了。 GLCanvas里用的是WeakHashMap来管理bitmap的
Ice_Tang commented
DrawText那个页面,我这边用模拟器和真机测试都无法完全回收,也看了你那个回收时调用final()方法,尽管那个方法有时候确实被调用了但是还是无法回收,我这边机型是华为荣耀9,还有一个问题等下我再开一页说明。
Ice_Tang commented
我在Github上已经提交详细问题,关于图片绘制不完整请参考视频:
https://bflyff.oss-cn-beijing.aliyuncs.com/video/SVID_20181113_084807.mp4?Expires=1542137974&OSSAccessKeyId=TMP.AQHmEmFHdXW9HFzKNcLR5R6hO83pNo6JzZ0oUjgaM77F0WHDc8wYnvKpCElHADAtAhQdV1jYWcEOOQbe2TZ2AHo9IZ7xdAIVAK9EtXq_RLtL4glER1Kao9SogbQh&Signature=OPcXwrwZsAE1YjADcf%2FcpK%2FBMRE%3D<https://bflyff.cn/video/test.mp4?Expires=1542136622&OSSAccessKeyId=TMP.AQHmEmFHdXW9HFzKNcLR5R6hO83pNo6JzZ0oUjgaM77F0WHDc8wYnvKpCElHADAtAhQdV1jYWcEOOQbe2TZ2AHo9IZ7xdAIVAK9EtXq_RLtL4glER1Kao9SogbQh&Signature=E9SlsHGguY4Yu9u8a7J%2BP19wAbA%3D>
您看到的可以拖动的其实是一个View,表示的是图片当前大小和位置,便于操作。点击空白处后面的GLTextureView开始绘制等大的图片。
视频有效时间18个小时,请勿转发。
…________________________________
发件人: ChillingVan <notifications@github.com>
发送时间: 2018年11月12日 14:32
收件人: ChillingVan/android-openGL-canvas
抄送: bflyff; Author
主题: Re: [ChillingVan/android-openGL-canvas] 如何解决在退出Activity后GLTextureView无法自动回收 (#52)
请问你看的是哪个界面?除了OffScreenActivity忘了onResume onPause外,其它基本上都能看到内存已经回收了。 GLCanvas里用的是WeakHashMap来管理bitmap的
―
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub<#52 (comment)>, or mute the thread<https://github.com/notifications/unsubscribe-auth/Ae4KFbq8RBlrKXGlo56lsT4SZPLuIC6wks5uuYZ_gaJpZM4YZViE>.
ChillingVan commented
视频打不开呀..
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><RequestId>5BEA4E2920FB5E8025044EEE</RequestId><HostId>bflyff.oss-cn-beijing.aliyuncs.com</HostId><OSSAccessKeyId>TMP.AQHmEmFHdXW9HFzKNcLR5R6hO83pNo6JzZ0oUjgaM77F0WHDc8wYnvKpCElHADAtAhQdV1jYWcEOOQbe2TZ2AHo9IZ7xdAIVAK9EtXq_RLtL4glER1Kao9SogbQh</OSSAccessKeyId><SignatureProvided>OPcXwrwZsAE1YjADcf/cpK/BMRE=<https://bflyff.cn/video/test.mp4?Expires=1542136622</SignatureProvided><StringToSign>GET
1542137974
/bflyff/video/SVID_20181113_084807.mp4</StringToSign><StringToSignBytes>47 45 54 0A 0A 0A 31 35 34 32 31 33 37 39 37 34 0A 2F 62 66 6C 79 66 66 2F 76 69 64 65 6F 2F 53 56 49 44 5F 32 30 31 38 31 31 31 33 5F 30 38 34 38 30 37 2E 6D 70 34 </StringToSignBytes></Error>
Ice_Tang commented
…
________________________________
发件人: ChillingVan <notifications@github.com>
发送时间: 2018年11月13日 4:09
收件人: ChillingVan/android-openGL-canvas
抄送: bflyff; Author
主题: Re: [ChillingVan/android-openGL-canvas] 如何解决在退出Activity后GLTextureView无法自动回收 (#52)
视频打不开呀..
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><RequestId>5BEA4E2920FB5E8025044EEE</RequestId><HostId>bflyff.oss-cn-beijing.aliyuncs.com</HostId><OSSAccessKeyId>TMP.AQHmEmFHdXW9HFzKNcLR5R6hO83pNo6JzZ0oUjgaM77F0WHDc8wYnvKpCElHADAtAhQdV1jYWcEOOQbe2TZ2AHo9IZ7xdAIVAK9EtXq_RLtL4glER1Kao9SogbQh</OSSAccessKeyId><SignatureProvided>OPcXwrwZsAE1YjADcf/cpK/BMRE=<https://bflyff.cn/video/test.mp4?Expires=1542136622</SignatureProvided><StringToSign>GET
1542137974
/bflyff/video/SVID_20181113_084807.mp4</StringToSign><StringToSignBytes>47 45 54 0A 0A 0A 31 35 34 32 31 33 37 39 37 34 0A 2F 62 66 6C 79 66 66 2F 76 69 64 65 6F 2F 53 56 49 44 5F 32 30 31 38 31 31 31 33 5F 30 38 34 38 30 37 2E 6D 70 34 </StringToSignBytes></Error>
―
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub<#52 (comment)>, or mute the thread<https://github.com/notifications/unsubscribe-auth/Ae4KFeVtfSI5Pw5u8vGJ7j9nC5-wlfMwks5uukXngaJpZM4YZViE>.
ChillingVan commented
ChillingVan commented
这个还有问题吗?
Ice_Tang commented
这个问题我现在使用的是用System.exit(0)强制退出的,因为等gc的话要好久,这期间如果连续不断关闭开启应用还是会产生OOM
Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for Windows 10
…________________________________
From: ChillingVan <notifications@github.com>
Sent: Thursday, November 15, 2018 9:46:21 PM
To: ChillingVan/android-openGL-canvas
Cc: bflyff; Author
Subject: Re: [ChillingVan/android-openGL-canvas] 如何解决在退出Activity后GLTextureView无法自动回收 (#52)
这个还有问题吗?
―
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub<#52 (comment)>, or mute the thread<https://github.com/notifications/unsubscribe-auth/Ae4KFX1f25oTt_Rjh6sG4yMs0_-jpF9kks5uvXAtgaJpZM4YZViE>.
ChillingVan commented
嗯嗯,那可能 private Map<Bitmap, BasicTexture> bitmapTextureMap = new WeakHashMap<>();这Map限制一下数量,或加一下有效时间好一点
Ice_Tang commented
行那我有空按你说的试一下,这个Map存在时间可以调节的话那基本没什么大问题了
Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for Windows 10
…________________________________
From: ChillingVan <notifications@github.com>
Sent: Thursday, November 15, 2018 9:53:03 PM
To: ChillingVan/android-openGL-canvas
Cc: bflyff; Author
Subject: Re: [ChillingVan/android-openGL-canvas] 如何解决在退出Activity后GLTextureView无法自动回收 (#52)
嗯嗯,那可能 private Map<Bitmap, BasicTexture> bitmapTextureMap = new WeakHashMap<>();这Map限制一下数量,或加一下有效时间好一点
―
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub<#52 (comment)>, or mute the thread<https://github.com/notifications/unsubscribe-auth/Ae4KFVnwlsNJN5dsuGXwF63n3z2MTZYbks5uvXG_gaJpZM4YZViE>.
ChillingVan commented
我重现不了你说的不断开启关闭会OOM。因为WeakHashMap的内容在内存不足时肯定会被回收的。我在AnimActivity里解码数十张图片绘制,内存占到100多M了,只要退出,内存就会立刻降,反复打开关闭10多次都不会出现OOM。
是不是还需要什么触发条件?
Ice_Tang commented
可能是我的华为手机系统有毛病吧,两个真机每次dump出来一堆bitmap没被回收,而且每次重启应用都在增加,我换别的模拟器到没这样的情况,第二次启动时之前的bitmap基本就回收了,关于这个内存回收暂时没啥问题了,我还是希望您去修复下那个缩放的问题,比起这点内存,体验的问题应该比较重要。
Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for Windows 10
…________________________________
From: ChillingVan <notifications@github.com>
Sent: Tuesday, November 20, 2018 10:11:20 PM
To: ChillingVan/android-openGL-canvas
Cc: bflyff; Author
Subject: Re: [ChillingVan/android-openGL-canvas] 如何解决在退出Activity后GLTextureView无法自动回收 (#52)
我重现不了你说的不断开启关闭会OOM。因为WeakHashMap的内容在内存不足时肯定会被回收的。我在AnimActivity里解码数十张图片绘制,内存占到100多M了,只要退出,内存就会立刻降,反复打开关闭10多次都不会出现OOM。
是不是还需要什么触发条件?
―
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub<#52 (comment)>, or mute the thread<https://github.com/notifications/unsubscribe-auth/Ae4KFdDLx4B3_2x-WaY_4kFat64lx7cQks5uxA2IgaJpZM4YZViE>.
ChillingVan commented
那就好