【发布时间】: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