处理绘图/绘画/保存多个位图

时间:2016-10-20 08:36:14

标签: android android-fragments bitmap android-asynctask

目标:

我想从pdf中绘制/写/绘制位图并将它们保存在一起,这样我就可以发送电子邮件了。

详细信息:

我有多个Pdf个文件,每个文件都包含5-20个页面,现在正在从pdfs中提取位图并将它们加载到ViewPager中的片段中, 在哪里我可以刷它们,写/画或我想要的任何东西。要保存/恢复我正在使用onSaveInstanceState的位图的当前状态。 这样我就可以在来回扫描的同时检索位图的最后一个阶段。

这样的事情:

@Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putParcelable("Bitmap", bitmap);
    }

问题:

用户按下发送电子邮件按钮,我应该可以保存所有图像,无论他在哪个页面,即他已编辑了5到10页 现在他在第10页并按下发送按钮我应该能够检索所有已编辑的图像。

问题2:

正如我所说的,图像数量约为5-20,在onSaveInstanceState中保存状态效果很好,但它会不断增加内存中的应用程序内存,并且应用程序在应用程序大小为10的图像处崩溃到150Mbs

但是将图像保存为onSaveInstanceState中的包也是必要的,因为当用户向前滑动时,它有助于更​​快地加载图像。

  

所以我在想是否有任何方法可以创建自定义捆绑包   在滚动5页后我们可以将图像写入磁盘的类   并清除内存并在用户时将其从磁盘读回内存   滚动回来?听起来有什么合理意义吗?

我尝试了什么:

当位图以单独的片段加载时,我尝试将位图保存到OnDestroy中的外部存储器,但是将位图保存到磁盘不是一项小任务,但使用AsyncTask需要时间 但是当用户在片段之间快速滑动时,在OnDestroy中保存位图似乎不是一种方便的方法。

这就是为什么我问这个问题,所以也许你对情况有了更好的了解,可以帮助我以更方便的方式实现这个目标。

那么你的目的是如何处理这种情况呢?

注意:

如果您无法了解情况并需要更多信息,请给我留言,我会更新问题。

由于

1 个答案:

答案 0 :(得分:0)

让我来描述我现在如何看待这个问题的解决方案。

应该有一个Service带有已编辑的位图和一些 id (对于原始位图的所有修改都相同),将其添加到队列中然后该队列中的每个项目都会持久存储到外部存储中。它具有执行该任务的有限Executor实例(它们可能只是Runnable)而Service创建了一个HashMap,其中将任务的地图Future映射到位图标识符。因此,当新的Bitmap出现时,Service会检查地图并替换等待任务(使用相同的原始位图)(如果存在)。

您可以从Service的{​​{1}}拦截器向此destroyItem发送任务。

因此,当用户点击“保存”按钮时,您还应将所有已编辑的位图发送到此FragmentStatePagerAdapter,然后等待完成。