All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cmonbaby.http.schedulers.AndroidSchedulers Maven / Gradle / Ivy

There is a newer version: 2.0.2
Show newest version
package com.cmonbaby.http.schedulers;

import android.os.Looper;

import com.cmonbaby.http.plugins.RxAndroidPlugins;
import com.cmonbaby.http.plugins.RxAndroidSchedulersHook;

import java.util.concurrent.atomic.AtomicReference;

import rx.Scheduler;
import rx.annotations.Experimental;

/**
 * 

Author: Simon *

QO: 8950764 *

Email: [email protected] *

WebSize: https://www.cmonbaby.com *

Version: 1.0.0 *

Date: 2020/12/28 *

Description: Scheduler */ public final class AndroidSchedulers { private static final AtomicReference INSTANCE = new AtomicReference<>(); private final Scheduler mainThreadScheduler; private static AndroidSchedulers getInstance() { for (;;) { AndroidSchedulers current = INSTANCE.get(); if (current != null) { return current; } current = new AndroidSchedulers(); if (INSTANCE.compareAndSet(null, current)) { return current; } } } private AndroidSchedulers() { RxAndroidSchedulersHook hook = RxAndroidPlugins.getInstance().getSchedulersHook(); Scheduler main = hook.getMainThreadScheduler(); if (main != null) { mainThreadScheduler = main; } else { mainThreadScheduler = new LooperScheduler(Looper.getMainLooper()); } } /** A {@link Scheduler} which executes actions on the Android UI thread. */ public static Scheduler mainThread() { return getInstance().mainThreadScheduler; } /** A {@link Scheduler} which executes actions on {@code looper}. */ public static Scheduler from(Looper looper) { if (looper == null) throw new NullPointerException("looper == null"); return new LooperScheduler(looper); } /** * Resets the current {@link AndroidSchedulers} instance. * This will re-init the cached schedulers on the next usage, * which can be useful in testing. */ @Experimental public static void reset() { INSTANCE.set(null); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy