Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Asynchronous Injection

Asynchronous Injection

funnelbit

June 22, 2016
Tweet

More Decks by funnelbit

Other Decks in Technology

Transcript

  1. "TZODISPOPVT*OKFDUJPO
    JEGVOOFMCJU

    View Slide

  2. ࣗݾ঺հ
    ๺ଜྋ
    )BUFOBGVOOFMCJU
    5XJUUFS!FYQFSPQFSP

    View Slide

  3. View Slide

  4. "OESPJE
    Ͱ
    ඇಉظ
    ʹ
    ґଘղܾ͢Δ࿩

    View Slide

  5. %BHHFS
    1SPEVDFST
    w ඇಉظͰґଘղܾ͢Δ࢓૊ΈΛఏڙ

    View Slide

  6. ؆୯ͳྫ
    w .PEVMFº
    w $PNQPOFOU
    w "DUJWJUZ

    View Slide

  7. .PEVMF
    @ProducerModule

    final class AppProducerModule {

    @Produces

    ListenableFuture getUserData() {

    // ~ ͳΜ͔ΊͬͪΌ͕͔͔࣌ؒΔॲཧ ~

    return Futures.immediateFuture(new UserData("userName"));

    }


    @Produces

    String userName(UserData userData) {
    return userData.name; // Activity ͸͜Ε͕΄͍͠

    }

    View Slide

  8. .PEVMF
    @ProducerModule

    final class AppProducerModule {

    @Produces

    ListenableFuture getUserData() { // 1

    // ~ ͳΜ͔ΊͬͪΌ͕͔͔࣌ؒΔॲཧ ~

    return Futures.immediateFuture(new UserData("userName"));

    }


    @Produces

    String userName(UserData userData) { // 2
    return userData.name; // Activity ͸͜Ε͕΄͍͠

    }

    View Slide

  9. .PEVMF
    @Module

    public class ExecutorModule {

    @Provides

    @Production

    static Executor executor() {

    return Executors.newCachedThreadPool();

    }

    }

    View Slide

  10. $PNQPOFOU
    @ProductionComponent(modules = {
    ExecutorModule.class,
    AppProducerModule.class})

    public interface AppProducerComponent {

    ListenableFuture userName();

    }

    View Slide

  11. "DUJWJUZ

    ListenableFuture userDataListenableFuture =
    DaggerAppProducerComponent.create().userName();

    Futures.addCallback(
    userDataListenableFuture,
    new FutureCallback() {

    @Override

    public void onSuccess(String result) {

    Log.e("name", result);

    }


    @Override

    public void onFailure(Throwable t) {

    Log.e("failure", t.toString());

    }

    });

    View Slide

  12. 1SPEVDFS5

    View Slide

  13. .PEVMF
    @ProducerModule

    public class AppProducerLazyModule {

    @Produces @Normal

    ListenableFuture provideNUserData() {

    return Futures.immediateFuture(new UserData("normal"));

    }


    @Produces @Special

    ListenableFuture provideSUserData() {

    return Futures.immediateFuture(new UserData("special"));

    }

    @Produces

    ListenableFuture provideUserData(
    @Normal Producer nProducer,
    @Special Producer sProducer) {

    return sProducer.get();

    }

    }

    View Slide

  14. @ProducerModule
    public class MyModule {
    @Produces ListenableFuture a() { … }
    @Produces ListenableFuture b(A a) { … }
    @Produces ListenableFuture c(B b) { … }
    @Produces @Delayed ListenableFuture delayedC(A a,
    Producer c) { … return c.get(); }
    }

    View Slide

  15. @ProducerModule
    public class MyModule {
    @Produces ListenableFuture a() { … } // 1
    @Produces ListenableFuture b(A a) { … } // 3
    @Produces ListenableFuture c(B b) { … } // 4
    @Produces @Delayed ListenableFuture delayedC(A a,
    Producer c) { … return c.get(); } // 2
    }

    View Slide

  16. 1SPEVDFE5

    View Slide

  17. .PEVMF
    @ProducerModule

    final class AppProducerModule {

    @Produces

    ListenableFuture getUserData() {

    // ~ ͳΜ͔ΊͬͪΌ͕͔͔࣌ؒΔॲཧ ~

    throw new IllegalStateException(); // Θ͟ͱམͱ͢

    }


    @Produces

    String userName(Produced userData) {

    try {

    return userData.get().name;

    } catch (ExecutionException e) {

    e.printStackTrace();

    return "Կ͔͕ى͖ͨ";

    }

    }

    }

    View Slide

  18. ৄࡉ
    w IUUQHPPHMFHJUIVCJPEBHHFSQSPEVDFST

    View Slide

  19. ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide