【问题标题】:Improving file save performance in android提高android中的文件保存性能
【发布时间】:2017-04-03 09:18:25
【问题描述】:

我在外部存储器中有 100 张图像,我在 for 循环中执行以下两项任务。

  1. 将每个项目加载为位图并将其与另一个位图合并
  2. 将结果作为新文件保存在内存中

对于 100 张图像,这需要太多时间。合并位图很快就可以退出,但是将结果保存在文件中需要太多时间。有没有办法解决这个问题?将位图保存在内存中并批量保存文件可能会导致 OutOfMemoryException 。

这就是我合并位图的方式: how to merge to two bitmap one over another

这就是我将位图保存到文件的方式:

       File imageFileFolder = new File(Statics.TEMP_PATH);
    imageFileFolder.mkdirs();
    FileOutputStream out = null;
    File imageFileName = new File(imageFileFolder, imageName);
    try {
        out = new FileOutputStream(imageFileName);
        imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
        out.flush();
        out.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

请注意,所有这些都在 AsyncTask 块中。

【问题讨论】:

  • 您可以尝试添加缓冲区,即out = new BufferedOutputStream(new FileOutputStream(imageFileName), 8 * 1024);(也可以尝试更大的大小)是否有任何可衡量的效果。
  • 什么是太多时间?请告诉我多少秒。还要告诉文件大小。使用 cpu 的核心并使用线程。每个核心一个线程。或者两个。
  • @greenapps 保存文件是一项昂贵的任务。如果您有任何解决方案,请告诉我,我会告诉您其中的区别。因为数据集不是很重要。
  • @zapl 好的,我会检查的
  • 您没有提供我要求的信息。我已经告诉过你一个解决方案。

标签: java android file bitmap


【解决方案1】:

最后我提出了将位图保存为 jpeg 的解决方案。保存 250k png 位图需要将近 500 毫秒。 jpeg 格式的相同位图大约需要 50 毫秒。虽然质量不会相同,但看起来这是质量和性能之间的权衡。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2014-05-08
    • 2020-09-03
    • 1970-01-01
    • 2019-01-22
    相关资源
    最近更新 更多