Example usage for android.support.v4.content ParallelExecutorCompat getParallelExecutor

List of usage examples for android.support.v4.content ParallelExecutorCompat getParallelExecutor

Introduction

In this page you can find the example usage for android.support.v4.content ParallelExecutorCompat getParallelExecutor.

Prototype

public static Executor getParallelExecutor() 

Source Link

Usage

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);
            }
        };
    };
}