2

我正在开发一个下载图像并将它们保存到 sdcard 的应用程序。与 sdcard 交互的类看起来像这样......

public class SDCardImageManagerImp implements SDCardImageManager {

    private Context context;

    @Inject
    public SDCardImageManagerImp(Context context) {
        this.context = context;
    }

    @Override
    public void saveToSDCard(String id, Bitmap bitmap) throws FileNotFoundException {
        FileOutputStream outputStream = context.openFileOutput(id, Context.MODE_PRIVATE);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
    }

    @Override
    public Bitmap getImage(String id) throws FileNotFoundException {
        return BitmapFactory.decodeStream(context.openFileInput(id));
    }

    @Override
    public void deleteImage(String id) {
        context.deleteFile(id);
    }

}

这个类是一个单例,因为我读取写入具有多个线程的磁盘会影响性能。但是我确实有多个线程下载数据并将其发送到此类。所以我的问题是这个类中的所有方法都应该对它们进行同步密钥工作吗?

4

2 回答 2

2

为什么不使用writerThreadPool = Executors.newFixedThreadPool(numThreads). 这样,writerThreadPool.submit()当线程可用时,您调用允许图像排队等待写入。线程池将为您处理 io 限制,因为它只允许您创建的给定数量的线程。并且通过使用Executors.newFixedThreadPool,您可以通过更改numThreads以允许更多或更少的线程获得所需的性能来轻松地使用线程数。

于 2012-10-25T12:06:16.120 回答
1

我不知道假设是否有效(您应该限制对 SD 卡的 I/O),但即使是这样,您也可能希望使其可配置,同步关键字不会让您这样做。

像计数信号量(以及设置许可数量的配置文件)之类的东西怎么样?

于 2012-10-25T11:55:36.027 回答