减小线程并发数量防止内存溢出

mem
liuguijing 6 months ago
parent 2c3d04758a
commit 04b7129675

@ -0,0 +1,30 @@
package com.xypower.mppreview;
import android.os.AsyncTask;
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class AsyncTaskWithCustomThreadPool extends AsyncTask<Void, Void, Void> {
private static final int CORE_POOL_SIZE = 2; // 自定义线程数
private static final int MAXIMUM_POOL_SIZE = 2; // 自定义线程数
private static final int KEEP_ALIVE = 3; // 自定义线程存活时间
public static final Executor THREAD_POOL_EXECUTOR
= new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
@Override
protected Void doInBackground(Void... params) {
// 你的后台操作
return null;
}
public void executeTask() {
executeOnExecutor(THREAD_POOL_EXECUTOR);
}
}

@ -71,6 +71,9 @@ import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore; import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@ -128,6 +131,7 @@ public class Camera2RawFragment extends Fragment {
private static final int STATE_WAITING_FOR_3A_CONVERGENCE = 3; private static final int STATE_WAITING_FOR_3A_CONVERGENCE = 3;
private OrientationEventListener mOrientationListener; private OrientationEventListener mOrientationListener;
private ExecutorService executorService;
public static native boolean makeHdr(long exposureTime1, String path1, long exposureTime2, String path2, String outputPath); public static native boolean makeHdr(long exposureTime1, String path1, long exposureTime2, String path2, String outputPath);
@ -538,6 +542,8 @@ public class Camera2RawFragment extends Fragment {
takePicture(); takePicture();
} }
}); });
executorService = Executors.newFixedThreadPool(2);
} }
@Override @Override
@ -1406,7 +1412,9 @@ public class Camera2RawFragment extends Fragment {
System.out.println(); System.out.println();
if (saver != null) { if (saver != null) {
queue.remove(requestId); queue.remove(requestId);
AsyncTask.THREAD_POOL_EXECUTOR.execute(saver); // AsyncTaskWithCustomThreadPool.THREAD_POOL_EXECUTOR.execute(saver);
executorService.execute(saver);
} }
} }

@ -98,8 +98,10 @@ public class ImageSaver implements Runnable {
File file = new File(directory, "create_" + t + "_" + generateTimestamp() + ".png"); File file = new File(directory, "create_" + t + "_" + generateTimestamp() + ".png");
String path = file.getPath(); String path = file.getPath();
try { try {
Log.e("测试测试", "开始转换");
RawToJpgConverter.convertRawToJpg(mFile.getPath(), path); RawToJpgConverter.convertRawToJpg(mFile.getPath(), path);
} catch (IOException e) { Log.e("测试测试", "转换结束");
} catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
PngPhotoBean bean = new PngPhotoBean(); PngPhotoBean bean = new PngPhotoBean();
@ -115,7 +117,9 @@ public class ImageSaver implements Runnable {
String path1 = bean1.getPath(); String path1 = bean1.getPath();
String path2 = bean2.getPath(); String path2 = bean2.getPath();
String outputPath = directoryPath + "/" + "hdr_" + generateTimestamp() + ".png"; String outputPath = directoryPath + "/" + "hdr_" + generateTimestamp() + ".png";
Log.e("测试测试", "开始合成");
boolean b = makeHdr(bean1.getEtime(), path1, bean2.getEtime(), path2, outputPath); boolean b = makeHdr(bean1.getEtime(), path1, bean2.getEtime(), path2, outputPath);
Log.e("测试测试", "合成结束");
if (b) { if (b) {
mCallback.onResult(); mCallback.onResult();
// Toast.makeText(mContext.getApplicationContext(), "图片HDR成功", Toast.LENGTH_SHORT).show(); // Toast.makeText(mContext.getApplicationContext(), "图片HDR成功", Toast.LENGTH_SHORT).show();

Loading…
Cancel
Save