11
回答
Android多进程能否单独开辟一个进程进行图片处理
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

求教各位大神,最近在看Android多进程相关资料,想到我们应用中有个界面需要处理大量的大尺寸图片,忽然间想到能不能使用多进程技术,单独使用一个进程来处理这个界面的图片问题。这个方法可行吗?

为什么这么问,是因为我依稀记得要显示的话理论上应该都在UI所在进程的内存中才能显示,这样的话是不是我的多进程对于我这个问题就毫无意义了?另外webview是如何处理的呢,比如一个Activity中嵌套一个webview,webview中显示的是个全是大量大尺寸图片的网页。

求教各位大神,还望不吝指点

举报
e_e_eclipse
发帖于1年前 11回/589阅
共有11个答案 最后回答: 1年前
进程,线程恐怕你没弄明白,webview 是另起的线程,建议还是去看下相关文档,线程,进程的基础概念需要多了解

引用来自“花花兽”的评论

进程,线程恐怕你没弄明白,webview 是另起的线程,建议还是去看下相关文档,线程,进程的基础概念需要多了解
额,进程线程的概念还是理解的,只是好奇webview在处理大量的大尺寸图片时并没有像原生ui那样会瞬间吃掉很多的内存,而且也没有出现图片宽高过大快速滑动出现的硬件加速渲染问题,所以以为他是开了一个自己的进程在跑,如果只是开一个线程的话,那是如何处理大量大尺寸图片的
在我们的应用中有Activity ,其中viewpager的一页全是大量的大尺寸图片,当用原生的ui打开时会吃掉大量的内存,,而同样一个位置,用webview打开对应的h5页面的时候,这个页面其实也全是大量的大尺寸图片,但他的内存消耗非常的小,,前后对比发现用webview打开后内存使用量只多了不到3M,所以一直在想,webview对图片的处理是不是在我应用的进程中

引用来自“疯狂的蜗牛k”的评论

可以的,子线程从网络获取图片可以利用lur缓存起来,主线程从缓存中获取就可以了
额,我们确实是这么做的,关键是图片的一级缓存是存在于我们应用自己的进程中的,也就是说还是会出现吃掉大量内存空间的情况,我只是好奇,为什么同样一个位置,用webview打开,他的内存使用量会如此的少

webview显示的图片都是经过C处理过的图片,至于内存,我想给你说的是就好比你用电脑浏览器打开图片和用你的图片相册查看是一个道理。一个是web引擎进行渲染,一个是原生渲染,本身机制就不同;而不是用独立进程能搞定的事儿。

可能还是我的表述不够清楚,所以大家对我的问题理解有些偏差,

我主要的问题点在于为什么webview在处理大量的图片时候申请内存较少,而对应的使用原生UI会申请很多内存,所以一直在怀疑webview的图片处理是不是在我们应用的进程中进行的。

唉,表达能力有限,还请大家见谅

引用来自“e_e_eclipse”的评论

可能还是我的表述不够清楚,所以大家对我的问题理解有些偏差,

我主要的问题点在于为什么webview在处理大量的图片时候申请内存较少,而对应的使用原生UI会申请很多内存,所以一直在怀疑webview的图片处理是不是在我们应用的进程中进行的。

唉,表达能力有限,还请大家见谅

上面给你回答了,并不是进程问题,而是渲染引擎问题。其中之所以会出现原生应用比webview更加占用内存其实是在于其中的Bitmap的问题,原生的是用bitmap来存储的图片信息,图片越大占用内存越多;而webview并不是这样。所以跟进程无关。想要内存占用少,可以考虑压缩图片进行现实,具体的压缩需要根据控件大小屏幕像素等进行运算,得出最佳的图片大小然后再显示,这样就能极大可能减少内存消耗;如果图片要顺畅就要进行缓存,而缓存就涉及到更多的一些事儿了。

而这些工作:facebook fresco 框架和 google glide 框架中都要很好的解决方案,能够很大程度的减少内存消耗,以及解决顺畅的问题。

顶部