gpt4 book ai didi

android - HandlerThread 阻塞 UI android

转载 作者:行者123 更新时间:2023-11-29 01:20:43 27 4
gpt4 key购买 nike

我正在为 Android 修改 Google 的 Camera2 API 示例,可在此处找到:https://github.com/googlesamples/android-Camera2Basic

我正在将捕获的图像上传到 Cloudinary,显然需要在后台线程中执行此操作,这样 UI 才不会被阻塞。

然而,我遇到的问题是,在上传图像时,UI 实际上被阻塞了,尽管据我所知,它不应该被阻塞,因为 Handler 是使用 Looper 从后台线程创建的像这样:

private void startBackgroundThread() {
mBackgroundThread = new HandlerThread("CameraBackground");
mBackgroundThread.start();
mBackgroundHandler = new Handler(mBackgroundThread.getLooper());
}

ImageSaver类,负责将抓取的图片写入磁盘,如下:

private static class ImageSaver implements Runnable {
/**
* The JPEG image
*/
private final Image mImage;
/**
* The file we save the image into.
*/
private final File mFile;

public ImageSaver(Image image, File file ) {
mImage = image;
mFile = file;
}

@Override
public void run() {
ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);
FileOutputStream output = null;
try {
output = new FileOutputStream(mFile);
output.write(bytes);
InputStream is = new ByteArrayInputStream(bytes);
Map uploadResult = CloudinaryManager.getInstance().uploader().upload(is, ObjectUtils.asMap(
"api_key", CloudinaryManager.CLOUDINARY_API_KEY,
"api_secret", CloudinaryManager.CLOUDINARY_SECRET_KEY
));
System.out.println("result");
} catch (IOException e) {
e.printStackTrace();
} finally {
mImage.close();
if (null != output) {
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

ImageSaver 在此处添加到 Handler 中:

 private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
= new ImageReader.OnImageAvailableListener() {

@Override
public void onImageAvailable(ImageReader reader) {
mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile));
}
};

如果能给我指明正确方向的任何帮助或建议,我将不胜感激。

最佳答案

我相信这是因为相机正在使用的背景中有一个锁......我怀疑你从 ImageReader 获取图像后,它一直持有锁,直到你完成资源......所以作为建议,我会在 onImageAvailable 中填充字节数组,关闭您获取的图像,并将字节数组发送到 AsyncTask 以执行保存

关于android - HandlerThread 阻塞 UI android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36964572/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com