Kotlin协同路由在Android中的使用
我正在尝试使用Kotlin协程以获得更好的性能 但我不确定这是不是正确的使用方法,所以我想请专家们进行评审 在用相机拍照后,屏幕会被遮住半秒钟,而我猜图像处理是这样的 原来的代码是,Kotlin协同路由在Android中的使用,android,kotlin,Android,Kotlin,我正在尝试使用Kotlin协程以获得更好的性能 但我不确定这是不是正确的使用方法,所以我想请专家们进行评审 在用相机拍照后,屏幕会被遮住半秒钟,而我猜图像处理是这样的 原来的代码是, fun uploadPhoto(data: Intent): Observable<Response> { val bitmap = data.extras.get("data") as Bitmap val bytes = ByteArrayOutputStream() bit
fun uploadPhoto(data: Intent): Observable<Response> {
val bitmap = data.extras.get("data") as Bitmap
val bytes = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes)
val baseDir = Environment.getExternalStorageDirectory()
val file = File(baseDir, Calendar.getInstance().timeInMillis.toString() + ".jpg")
val fileOutputStream = FileOutputStream(file)
fileOutputStream.write(bytes.toByteArray())
fileOutputStream.close()
return uploadMedia(file)
}
fun上传照片(数据:意图):可观察{
val bitmap=data.extras.get(“数据”)作为位图
val bytes=ByteArrayOutputStream()
bitmap.compress(bitmap.CompressFormat.JPEG,100,字节)
val baseDir=Environment.getExternalStorageDirectory()
val file=file(baseDir,Calendar.getInstance().timeInMillis.toString()+“.jpg”)
val fileOutputStream=fileOutputStream(文件)
fileOutputStream.write(bytes.toByteArray())
fileOutputStream.close()
返回上传的媒体(文件)
}
在我读了这个教程之后
我把它改成
fun uploadPhoto(data: Intent): Observable<Response> {
val baseDir = Environment.getExternalStorageDirectory()
val file = File(baseDir, Calendar.getInstance().timeInMillis.toString() + ".jpg")
launch {
val bitmap = data.extras.get("data") as Bitmap
val bytes = compressBitMap(bitmap).await()
val fileOutputStream = FileOutputStream(file)
fileOutputStream.write(bytes.toByteArray())
fileOutputStream.close()
}
return uploadMedia(file)
}
private fun compressBitMap(bitmap: Bitmap) = async(CommonPool) {
val bytes = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes)
return@async bytes
}
fun上传照片(数据:意图):可观察{
val baseDir=Environment.getExternalStorageDirectory()
val file=file(baseDir,Calendar.getInstance().timeInMillis.toString()+“.jpg”)
发射{
val bitmap=data.extras.get(“数据”)作为位图
val bytes=压缩位图(位图).await()
val fileOutputStream=fileOutputStream(文件)
fileOutputStream.write(bytes.toByteArray())
fileOutputStream.close()
}
返回上传的媒体(文件)
}
私有fun压缩位图(位图:位图)=异步(公共池){
val bytes=ByteArrayOutputStream()
bitmap.compress(bitmap.CompressFormat.JPEG,100,字节)
return@async字节
}
但我看不出有什么不同
我想做的是,我想在后台运行压缩位图和fileOutputStream作业,以防止干扰主线程
它是否提高了性能?协同程序在“协同程序文本”中执行,您似乎正在使用旧版本的libs,在新版本中,您应该始终使用启动(UI)或启动(CommonPool)指定上下文。我不知道默认情况下“启动”使用的是哪个上下文,但我猜是UI。 如果这是正确的,您实际上是在UI线程中等待compressBitMap完成,阻塞UI线程(一种无意义的协同程序使用)
尝试改用launch(CommonPool),看看是否发生了奇迹。似乎
fun compressBitMap
应该改为suspend fun compressBitMap
。