【问题标题】:MediaStore.Images.Media.getBitmap takes too much timeMediaStore.Images.Media.getBitmap 需要太多时间
【发布时间】:2019-02-18 17:37:18
【问题描述】:

我想检查我在外部存储中的照片中是否至少有一张人脸。

我这样查询外部内容:

   queryTimeTaken += measureTimeMillis {
        try {
            cursor = context.contentResolver.query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                projection,
                null,
                null,
                sortOrderAndFetchLimit
            )
        } catch (e: Exception) {
            println("Error when executing query(): $e")
        }
    }

获取 uri 需要 0.004 秒

getUriTimeTaken += measureTimeMillis {
    uri = ContentUris.withAppendedId(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, cursor.getInt(cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID)).toLong())

}

getBitmap() 花费太多时间。大约需要 10 秒。

getBitmapTimeTaken += measureTimeMillis {
    bitmap = MediaStore.Images.Media.getBitmap(context.contentResolver, uri)
}

getBitmap() 占用了总时间的 90%,所以这里是一个瓶颈。 有什么办法可以让它更快吗?

【问题讨论】:

  • 确保您没有在 MainThread 上查询!
  • @ChintanSoni 我使用 Rxandroid,它在 IOThread 上运行

标签: android android-bitmap android-cursor vision-api


【解决方案1】:

我使用缩略图而不是全尺寸图像,这比以前快得多。

【讨论】:

    猜你喜欢
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2011-09-23
    • 2013-05-19
    • 2011-06-03
    • 1970-01-01
    相关资源
    最近更新 更多