私はあなたがすべてのトランザクションがバックグラウンドで実行されていることを確認している場合は、探さなければならない、あなたの問題はAsyncTask
とrealm.executeTransactionAsync
間の違いとは何の関係もありません(あなたは正しい方法でAsyncTask
を拡張する場合)、彼らは同じ仕事をすると信じてどこか別の問題(メインスレッドで実行されているいくつかの長いタスク)、あなたが投稿したコードではなくヒントとして言うことはより多くの何もない:
両方AsyncTask
とRealm
(非同期トランザクションは)いくつかの違いでThreadPoolExecutor
使用:
を
リラム:
private static final int CORE_POOL_SIZE = Runtime.getRuntime().availableProcessors() * 2 + 1;
private static final int QUEUE_SIZE = 100;
ThreadPoolExecutor THREAD_POOL_EXECUTOR = ThreadPoolExecutor(CORE_POOL_SIZE, CORE_POOL_SIZE,
0L, TimeUnit.MILLISECONDS, //terminated idle thread
new ArrayBlockingQueue<Runnable>(QUEUE_SIZE));
AsyncTask:
private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
private static final int KEEP_ALIVE = 1;
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
private final AtomicInteger mCount = new AtomicInteger(1);
public Thread newThread(Runnable r) {
return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
}
};
private static final BlockingQueue<Runnable> sPoolWorkQueue =
new LinkedBlockingQueue<Runnable>(128);
public static final Executor THREAD_POOL_EXECUTOR
= new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);