List of usage examples for android.support.v4.content ParallelExecutorCompat getParallelExecutor
public static Executor getParallelExecutor()
From source file:android.support.v7.util.MessageThreadUtil.java
public BackgroundCallback<T> getBackgroundProxy(final BackgroundCallback<T> callback) { return new BackgroundCallback<T>() { final private MessageQueue mQueue = new MessageQueue(); final private Executor mExecutor = ParallelExecutorCompat.getParallelExecutor(); AtomicBoolean mBackgroundRunning = new AtomicBoolean(false); private static final int REFRESH = 1; private static final int UPDATE_RANGE = 2; private static final int LOAD_TILE = 3; private static final int RECYCLE_TILE = 4; @Override//from w w w . j a v a 2s.co m public void refresh(int generation) { sendMessageAtFrontOfQueue(SyncQueueItem.obtainMessage(REFRESH, generation, null)); } @Override public void updateRange(int rangeStart, int rangeEnd, int extRangeStart, int extRangeEnd, int scrollHint) { sendMessageAtFrontOfQueue(SyncQueueItem.obtainMessage(UPDATE_RANGE, rangeStart, rangeEnd, extRangeStart, extRangeEnd, scrollHint, null)); } @Override public void loadTile(int position, int scrollHint) { sendMessage(SyncQueueItem.obtainMessage(LOAD_TILE, position, scrollHint)); } @Override public void recycleTile(TileList.Tile<T> tile) { sendMessage(SyncQueueItem.obtainMessage(RECYCLE_TILE, 0, tile)); } private void sendMessage(SyncQueueItem msg) { mQueue.sendMessage(msg); maybeExecuteBackgroundRunnable(); } private void sendMessageAtFrontOfQueue(SyncQueueItem msg) { mQueue.sendMessageAtFrontOfQueue(msg); maybeExecuteBackgroundRunnable(); } private void maybeExecuteBackgroundRunnable() { if (mBackgroundRunning.compareAndSet(false, true)) { mExecutor.execute(mBackgroundRunnable); } } private Runnable mBackgroundRunnable = new Runnable() { @Override public void run() { while (true) { SyncQueueItem msg = mQueue.next(); if (msg == null) { break; } switch (msg.what) { case REFRESH: mQueue.removeMessages(REFRESH); callback.refresh(msg.arg1); break; case UPDATE_RANGE: mQueue.removeMessages(UPDATE_RANGE); mQueue.removeMessages(LOAD_TILE); callback.updateRange(msg.arg1, msg.arg2, msg.arg3, msg.arg4, msg.arg5); break; case LOAD_TILE: callback.loadTile(msg.arg1, msg.arg2); break; case RECYCLE_TILE: //noinspection unchecked callback.recycleTile((TileList.Tile<T>) msg.data); break; default: Log.e("ThreadUtil", "Unsupported message, what=" + msg.what); } } mBackgroundRunning.set(false); } }; }; }
From source file:com.ferdi2005.secondgram.support.util.MessageThreadUtil.java
@Override public BackgroundCallback<T> getBackgroundProxy(final BackgroundCallback<T> callback) { return new BackgroundCallback<T>() { final MessageQueue mQueue = new MessageQueue(); final private Executor mExecutor = ParallelExecutorCompat.getParallelExecutor(); AtomicBoolean mBackgroundRunning = new AtomicBoolean(false); static final int REFRESH = 1; static final int UPDATE_RANGE = 2; static final int LOAD_TILE = 3; static final int RECYCLE_TILE = 4; @Override/* www . ja v a2 s . c o m*/ public void refresh(int generation) { sendMessageAtFrontOfQueue(SyncQueueItem.obtainMessage(REFRESH, generation, null)); } @Override public void updateRange(int rangeStart, int rangeEnd, int extRangeStart, int extRangeEnd, int scrollHint) { sendMessageAtFrontOfQueue(SyncQueueItem.obtainMessage(UPDATE_RANGE, rangeStart, rangeEnd, extRangeStart, extRangeEnd, scrollHint, null)); } @Override public void loadTile(int position, int scrollHint) { sendMessage(SyncQueueItem.obtainMessage(LOAD_TILE, position, scrollHint)); } @Override public void recycleTile(TileList.Tile<T> tile) { sendMessage(SyncQueueItem.obtainMessage(RECYCLE_TILE, 0, tile)); } private void sendMessage(SyncQueueItem msg) { mQueue.sendMessage(msg); maybeExecuteBackgroundRunnable(); } private void sendMessageAtFrontOfQueue(SyncQueueItem msg) { mQueue.sendMessageAtFrontOfQueue(msg); maybeExecuteBackgroundRunnable(); } private void maybeExecuteBackgroundRunnable() { if (mBackgroundRunning.compareAndSet(false, true)) { mExecutor.execute(mBackgroundRunnable); } } private Runnable mBackgroundRunnable = new Runnable() { @Override public void run() { while (true) { SyncQueueItem msg = mQueue.next(); if (msg == null) { break; } switch (msg.what) { case REFRESH: mQueue.removeMessages(REFRESH); callback.refresh(msg.arg1); break; case UPDATE_RANGE: mQueue.removeMessages(UPDATE_RANGE); mQueue.removeMessages(LOAD_TILE); callback.updateRange(msg.arg1, msg.arg2, msg.arg3, msg.arg4, msg.arg5); break; case LOAD_TILE: callback.loadTile(msg.arg1, msg.arg2); break; case RECYCLE_TILE: //noinspection unchecked callback.recycleTile((TileList.Tile<T>) msg.data); break; default: Log.e("ThreadUtil", "Unsupported message, what=" + msg.what); } } mBackgroundRunning.set(false); } }; }; }
From source file:ir.irani.telecam.messenger.support.util.MessageThreadUtil.java
public BackgroundCallback<T> getBackgroundProxy(final BackgroundCallback<T> callback) { return new BackgroundCallback<T>() { final private MessageQueue mQueue = new MessageQueue(); final private Executor mExecutor = ParallelExecutorCompat.getParallelExecutor(); AtomicBoolean mBackgroundRunning = new AtomicBoolean(false); private static final int REFRESH = 1; private static final int UPDATE_RANGE = 2; private static final int LOAD_TILE = 3; private static final int RECYCLE_TILE = 4; @Override//from w w w . jav a 2 s . c o m public void refresh(int generation) { sendMessageAtFrontOfQueue(SyncQueueItem.obtainMessage(REFRESH, generation, null)); } @Override public void updateRange(int rangeStart, int rangeEnd, int extRangeStart, int extRangeEnd, int scrollHint) { sendMessageAtFrontOfQueue(SyncQueueItem.obtainMessage(UPDATE_RANGE, rangeStart, rangeEnd, extRangeStart, extRangeEnd, scrollHint, null)); } @Override public void loadTile(int position, int scrollHint) { sendMessage(SyncQueueItem.obtainMessage(LOAD_TILE, position, scrollHint)); } @Override public void recycleTile(TileList.Tile<T> tile) { sendMessage(SyncQueueItem.obtainMessage(RECYCLE_TILE, 0, tile)); } private void sendMessage(SyncQueueItem msg) { mQueue.sendMessage(msg); maybeExecuteBackgroundRunnable(); } private void sendMessageAtFrontOfQueue(SyncQueueItem msg) { mQueue.sendMessageAtFrontOfQueue(msg); maybeExecuteBackgroundRunnable(); } private void maybeExecuteBackgroundRunnable() { if (mBackgroundRunning.compareAndSet(false, true)) { mExecutor.execute(mBackgroundRunnable); } } private Runnable mBackgroundRunnable = new Runnable() { @Override public void run() { while (true) { SyncQueueItem msg = mQueue.next(); if (msg == null) { break; } switch (msg.what) { case REFRESH: mQueue.removeMessages(REFRESH); callback.refresh(msg.arg1); break; case UPDATE_RANGE: mQueue.removeMessages(UPDATE_RANGE); mQueue.removeMessages(LOAD_TILE); callback.updateRange(msg.arg1, msg.arg2, msg.arg3, msg.arg4, msg.arg5); break; case LOAD_TILE: callback.loadTile(msg.arg1, msg.arg2); break; case RECYCLE_TILE: //noinspection unchecked callback.recycleTile((TileList.Tile<T>) msg.data); break; default: //Log.e("ThreadUtil", "Unsupported message, what=" + msg.what); } } mBackgroundRunning.set(false); } }; }; }
From source file:cn.ismartv.tvrecyclerview.util.MessageThreadUtil.java
@Override public BackgroundCallback<T> getBackgroundProxy(final BackgroundCallback<T> callback) { return new BackgroundCallback<T>() { final private MessageQueue mQueue = new MessageQueue(); final private Executor mExecutor = ParallelExecutorCompat.getParallelExecutor(); AtomicBoolean mBackgroundRunning = new AtomicBoolean(false); private static final int REFRESH = 1; private static final int UPDATE_RANGE = 2; private static final int LOAD_TILE = 3; private static final int RECYCLE_TILE = 4; @Override//from ww w.j a v a 2 s . com public void refresh(int generation) { sendMessageAtFrontOfQueue(SyncQueueItem.obtainMessage(REFRESH, generation, null)); } @Override public void updateRange(int rangeStart, int rangeEnd, int extRangeStart, int extRangeEnd, int scrollHint) { sendMessageAtFrontOfQueue(SyncQueueItem.obtainMessage(UPDATE_RANGE, rangeStart, rangeEnd, extRangeStart, extRangeEnd, scrollHint, null)); } @Override public void loadTile(int position, int scrollHint) { sendMessage(SyncQueueItem.obtainMessage(LOAD_TILE, position, scrollHint)); } @Override public void recycleTile(TileList.Tile<T> tile) { sendMessage(SyncQueueItem.obtainMessage(RECYCLE_TILE, 0, tile)); } private void sendMessage(SyncQueueItem msg) { mQueue.sendMessage(msg); maybeExecuteBackgroundRunnable(); } private void sendMessageAtFrontOfQueue(SyncQueueItem msg) { mQueue.sendMessageAtFrontOfQueue(msg); maybeExecuteBackgroundRunnable(); } private void maybeExecuteBackgroundRunnable() { if (mBackgroundRunning.compareAndSet(false, true)) { mExecutor.execute(mBackgroundRunnable); } } private Runnable mBackgroundRunnable = new Runnable() { @Override public void run() { while (true) { SyncQueueItem msg = mQueue.next(); if (msg == null) { break; } switch (msg.what) { case REFRESH: mQueue.removeMessages(REFRESH); callback.refresh(msg.arg1); break; case UPDATE_RANGE: mQueue.removeMessages(UPDATE_RANGE); mQueue.removeMessages(LOAD_TILE); callback.updateRange(msg.arg1, msg.arg2, msg.arg3, msg.arg4, msg.arg5); break; case LOAD_TILE: callback.loadTile(msg.arg1, msg.arg2); break; case RECYCLE_TILE: //noinspection unchecked callback.recycleTile((TileList.Tile<T>) msg.data); break; default: Log.e("ThreadUtil", "Unsupported message, what=" + msg.what); } } mBackgroundRunning.set(false); } }; }; }