Created
August 16, 2018 23:53
-
-
Save Amejia481/70117b9c125294dc780dd945728d002b to your computer and use it in GitHub Desktop.
AppExecutors example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.example.android.todolist; | |
| /* | |
| * Copyright (C) 2017 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| import android.os.Handler; | |
| import android.os.Looper; | |
| import android.support.annotation.NonNull; | |
| import java.util.concurrent.Executor; | |
| import java.util.concurrent.Executors; | |
| /** | |
| * Global executor pools for the whole application. | |
| * <p> | |
| * Grouping tasks like this avoids the effects of task starvation (e.g. disk reads don't wait behind | |
| * webservice requests). | |
| */ | |
| public class AppExecutors { | |
| // For Singleton instantiation | |
| private static final Object LOCK = new Object(); | |
| private static AppExecutors sInstance; | |
| private final Executor diskIO; | |
| private final Executor mainThread; | |
| private final Executor networkIO; | |
| private AppExecutors(Executor diskIO, Executor networkIO, Executor mainThread) { | |
| this.diskIO = diskIO; | |
| this.networkIO = networkIO; | |
| this.mainThread = mainThread; | |
| } | |
| public static AppExecutors getInstance() { | |
| if (sInstance == null) { | |
| synchronized (LOCK) { | |
| sInstance = new AppExecutors(Executors.newSingleThreadExecutor(), | |
| Executors.newFixedThreadPool(3), | |
| new MainThreadExecutor()); | |
| } | |
| } | |
| return sInstance; | |
| } | |
| public Executor diskIO() { | |
| return diskIO; | |
| } | |
| public Executor mainThread() { | |
| return mainThread; | |
| } | |
| public Executor networkIO() { | |
| return networkIO; | |
| } | |
| private static class MainThreadExecutor implements Executor { | |
| private Handler mainThreadHandler = new Handler(Looper.getMainLooper()); | |
| @Override | |
| public void execute(@NonNull Runnable command) { | |
| mainThreadHandler.post(command); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment