在用户界面线程上:
AsyncCaller asyncCaller = new AsyncCaller();
asyncCaller.doInBackground();
在AsyncTask中: @Override 保护的void doInBackground(Void ... params){
Mat orignal = new Mat(image1.getHeight(), image1.getWidth(), CvType.CV_8UC3);
Mat v_blur = new Mat(image1.getHeight(), image1.getWidth(), CvType.CV_8UC3);
Utils.bitmapToMat(image1, orignal);
Imgproc.GaussianBlur(orignal, v_blur, new Size(3, 3), 0);
// blur completed
Mat to_zero = new Mat(image1.getHeight(), image1.getWidth(), CvType.CV_8UC4);
Imgproc.threshold(v_blur, to_zero, 100, 100, Imgproc.THRESH_TOZERO);
Bitmap bmp = image1;
Log.e("background", "in bg");
Utils.bitmapToMat(bmp, to_zero);
for (int j = 0; j < bmp.getWidth(); j++) {
for (int i = 0; i < bmp.getHeight(); i++) {
int pixelValue = bmp.getPixel(j, i);
int red = Color.red(pixelValue);
int green = Color.green(pixelValue);
int blue = Color.blue(pixelValue);
if (red > 10 && blue > 10 && green > 10) {
int led_bulb = checkForAlreadyExistance(j, i);
if (led_bulb == -1) {
int start_x = getMinValue(j);
int start_y = getMinValue(i);
int end_x = getMaxValue(j, bmp.getWidth());
int end_y = getMaxValue(i, bmp.getHeight());
Log.e("crop_values", start_x + " " + end_x + " " + start_y + " " + end_y);
LEDs.add(new LedBoundingBox(LED++, end_x, start_x, end_y, start_y, 0, 0, 0.0));
} else {
if (j > LEDs.get(led_bulb).inner_x_max) {
LEDs.get(led_bulb).inner_x_max = j;
}
if (j < LEDs.get(led_bulb).inner_x_min) {
LEDs.get(led_bulb).inner_x_min = j;
}
if (i > LEDs.get(led_bulb).inner_y_max) {
LEDs.get(led_bulb).inner_y_max = i;
}
if (i < LEDs.get(led_bulb).inner_y_min) {
LEDs.get(led_bulb).inner_y_min = i;
}
}
}
}
}
Log.e("bgComplete", "complete");
return null;
}
我正在使用Android OpenCV库进行图像处理。首先,我在UI线程上完成了所有这些工作,但是遇到了UI挂起的问题。所以我将其移至后台线程。但是我仍然面临UI挂起的问题。谁能解释为什么会发生这种情况以及任何可能的解决方案? 谢谢
答案 0 :(得分:0)
在工作中使用Java线程而不是异步任务! 异步任务仅适用于小型操作。
答案 1 :(得分:0)
使用asyncCaller.execute():,不要直接调用doInBackground()
现在,您是在UI线程上调用此方法,而不是启动AsyncTask并让任务自己调用该线程。
AsyncTask任务=新的AsyncTask(); task.execute(paramsForDoInBackground);
应该怎么称呼
答案 2 :(得分:0)
最简单,最佳和直观的示例,并演示了如果您不想冻结UI时应如何精确。遇到此问题的每个人或不知道如何为android项目编码的任何人,都应该看到并遵循这种风格: