事情是这样的,我的同事让我帮他看这个代码为什么不分配内存,我看了两天没啥结果,水平不够就来问了
binding.button.setOnClickListener {
repeat(1000) {
list.add(Bitmap.createBitmap(10240, 1024 / 4, Bitmap.Config.ARGB_8888))
}
}
通过 Android studio 的 profiler 查看内存根本没动静,dump 出来看到都 bitmap 的 Native size 都已经 9 个 G 了(亲测),每个 java bitmao 也都有 NativePtr,还不是相同的,但是这应该是 bug 或者是虚拟内存空间的?搞不懂,然后看了两天代码,基础有点差,最后只看到确实分配了内存
sk_sp<Bitmap> Bitmap::allocateHeapBitmap(size_t size, const SkImageInfo& info, size_t rowBytes) {
// 应该是这里吧??
void* addr = calloc(size, 1);
if (!addr) {
return nullptr;
}
return sk_sp<Bitmap>(new Bitmap(addr, size, info, rowBytes));
}
昨天也是搞到几点才睡觉,救😭
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.