Android 后台线程中的位图操作使UI无响应
我正在后台线程中运行以下操作:Android 后台线程中的位图操作使UI无响应,android,performance,android-layout,android-studio,android-progressbar,Android,Performance,Android Layout,Android Studio,Android Progressbar,我正在后台线程中运行以下操作: 以jpeg格式本地存储字节图像数据 获取该图像作为位图 运行人脸检测算法并提取人脸点 根据这些点放置覆盖 最后再次保存位图 在执行这些操作时,我会显示一个进度条。但是进度条动画被卡住了,也就是说,在线程完成其工作之前,它将变得没有响应(更新:在后台工作运行时,整个UI中似乎没有任何功能) 这难道不会使使用后台线程的实际意图过时吗 我应该采取什么方法来克服这个问题 我的代码是: //Show ProgressBar Runnable worker = ()
//Show ProgressBar
Runnable worker = () -> {
//My Operations
runOnUiThread(() -> {
//Hide ProgressBar
});
}
您可以使用异步方法,它将起作用
private class MyAsyncTask extends AsyncTask<String, Progress, Bitmap> {
protected void onPreExecute() {
// Runs on the UI thread before doInBackground
progressBar.setVisibility(ProgressBar.VISIBLE);
}
protected Bitmap doInBackground(String... strings) {
// Some long-running task like downloading an image.
// convert your bitmap
return someBitmap;
}
protected void onProgressUpdate(Progress... values) {
//update progress
}
protected void onPostExecute(Bitmap result) {
//hide progress bar
}}
私有类MyAsyncTask扩展了AsyncTask{
受保护的void onPreExecute(){
//在doInBackground之前在UI线程上运行
progressBar.setVisibility(progressBar.VISIBLE);
}
受保护位图doInBackground(字符串…字符串){
//一些长期运行的任务,如下载图像。
//转换位图
返回位图;
}
受保护的void onProgressUpdate(进度…值){
//更新进度
}
受保护的void onPostExecute(位图结果){
//隐藏进度条
}}
你能把你的代码使用RxJava发布到后台进程中吗。@Jaymin在所有RxJava都使用线程之后,这会有什么不同?你从哪里开始进度条?你能保证你没有在主UI线程中运行后台线程吗?我之前就在做这件事。但我发现asyncTask比普通线程要慢。因为对于常规线程,引擎盖下的线程优先级大于异步任务