Slide 1

Slide 1 text

Architecture Components ษڧձ ͋Μ͍͟Ώ͖ ͕͑Θ Θ͞ͼʔ; ͋Β͖ ୈ1ճ໨ Lifecycles

Slide 2

Slide 2 text

https://goo.gl/5BjmG5

Slide 3

Slide 3 text

Download Android Studio 3.0 https://goo.gl/KmYZzW

Slide 4

Slide 4 text

Architecture Components Lifecycles LiveData ViewModel Room Paging

Slide 5

Slide 5 text

Architecture Components Lifecycles LiveData ViewModel Room Paging ݸผར༻OK

Slide 6

Slide 6 text

Architecture Components Lifecycles LiveData ViewModel Room Paging ݸผར༻OK ૊Έ߹Θͤར༻OK

Slide 7

Slide 7 text

Architecture Components Lifecycles LiveData ViewModel Room Paging ࠓ೔ͷςʔϚ͸͜Ε

Slide 8

Slide 8 text

Architecture Components Google I/O 2017 1.0.0 alpha 1 : 1.0.0 2017 11 6 Paging : 1.0.0-alpha4-1 2017 12 11 https://developer.android.com/topic/libraries/architecture/release-notes.html

Slide 9

Slide 9 text

Architecture Components (robust) (testable (maintainable)

Slide 10

Slide 10 text

Architecture Components allprojects { repositories { google() jcenter() } } ϓϩδΣΫτͷ build.gradle maven { url 'https://maven.google.com' } Android Gradle Plugin ͕ 3.0 ະຬͳΒ https://developer.android.com/topic/libraries/architecture/adding-components.html

Slide 11

Slide 11 text

Lifecycles

Slide 12

Slide 12 text

Lifecycles Ϟδϡʔϧͷ build.gradle dependencies { implementation "android.arch.lifecycle:runtime:1.0.3" annotationProcessor "android.arch.lifecycle:compiler:1.0.0" } * Java8 Language Support ʹ͍ͭͯ͸ࠓճ͸औΓ্͛·ͤΜ https://developer.android.com/topic/libraries/architecture/adding-components.html

Slide 13

Slide 13 text

v4 support library 26.1.0 Lifecycle FragmentActivity, Fragment v4 support library android.arch.lifecycle:runtime Lifecycle, LifecycleOwner, LifecycleObserver, LifecycleRegistry, GenericLifecycleObserver, OnLifecycleEvent * LifecycleRegistryOwner ͱ LifecycleActivity ͱ LifecycleFragment ͸ deprecated ʹͳ͍ͬͯΔ

Slide 14

Slide 14 text

Lifecycles Lifecycles = Lifecycle-aware Components Activity Fragment

Slide 15

Slide 15 text

class & interface

Slide 16

Slide 16 text

Lifecycle Lifecycles (Lifecycle.State) (Lifecycle.Event)

Slide 17

Slide 17 text

final Lifecycle.State state = lifecycle.getCurrentState();

Slide 18

Slide 18 text

Lifecycle.State enum INITIALIZED DESTROYED CREATED STARTED RESUMED https://developer.android.com/topic/libraries/architecture/lifecycle.html

Slide 19

Slide 19 text

Lifecycle.Event enum https://developer.android.com/topic/libraries/architecture/lifecycle.html ON_CREATE ON_START ON_RESUME ON_PAUSE ON_STOP ON_DESTROY ON_ANY

Slide 20

Slide 20 text

xx final boolean isAtLeastResumed = lifecycle.getCurrentState().isAtLeast(Lifecycle.State.RESUMED);

Slide 21

Slide 21 text

LifecycleOwner Lifecycle single method interface FragmentActivity LifecycleOwner v4 support library Fragment LifecycleOwner public interface LifecycleOwner { @NonNull Lifecycle getLifecycle(); }

Slide 22

Slide 22 text

package android.support.v4.app; @RestrictTo(LIBRARY_GROUP) public class SupportActivity extends Activity implements LifecycleOwner { … @Override public Lifecycle getLifecycle() { return mLifecycleRegistry; } } @RequiresApi(14) abstract class BaseFragmentActivityApi14 extends SupportActivity { @RestrictTo(LIBRARY_GROUP) abstract class BaseFragmentActivityApi16 extends BaseFragmentActivityApi14 { public class FragmentActivity extends BaseFragmentActivityApi16 implements ActivityCompat.OnRequestPermissionsResultCallback, ActivityCompat.RequestPermissionsRequestCodeValidator { … @Override public Lifecycle getLifecycle() { return super.getLifecycle(); } } SupportActivity Ͱ LifecycleRegistry Λ ࢖࣮ͬͯ૷͞Ε͍ͯΔ

Slide 23

Slide 23 text

FragmentActivity Lifecycle public class MainActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Lifecycle lifecycle = getLifecycle(); }

Slide 24

Slide 24 text

LifecycleObserver Lifecycle interface @OnLifecycleEvent Lifecycle.Event public interface LifecycleObserver { }

Slide 25

Slide 25 text

OnLifecycleEvent LifecycleObserver LifecycleEvent ON_CREATE, ON_START, ON_RESUME, ON_PAUSE, ON_STOP, ON_DESTROY, ON_ANY final LifecycleObserver observer = new LifecycleObserver() { @OnLifecycleEvent(Lifecycle.Event.ON_START) public void calledWhenStart() { } };

Slide 26

Slide 26 text

OnLifecycleEvent final LifecycleObserver observer = new LifecycleObserver() { @OnLifecycleEvent(Lifecycle.Event.ON_START) public void calledWhenOnStart() { Log.d("Lifecycle", "ON_START"); } @OnLifecycleEvent(Lifecycle.Event.ON_ANY) public void calledWhenOnAny() { Log.d("Lifecycle", "ON_ANY"); } };

Slide 27

Slide 27 text

OnLifecycleEvent 1 LifecycleOwner final LifecycleObserver observer = new LifecycleObserver() { @OnLifecycleEvent(Lifecycle.Event.ON_START) public void startSomething(LifecycleOwner source) { } };

Slide 28

Slide 28 text

OnLifecycleEvent ON_ANY 2 Lifecycle.Event final LifecycleObserver observer = new LifecycleObserver() { @OnLifecycleEvent(Lifecycle.Event.ON_ANY) public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) { } };

Slide 29

Slide 29 text

GenericLifecycleObserver LifecycleObserver interface Lifecycle.Event onStateChanged() public interface GenericLifecycleObserver extends LifecycleObserver { /** * Called when a state transition event happens. * * @param source The source of the event * @param event The event */ void onStateChanged(LifecycleOwner source, Lifecycle.Event event); } GenericLifecycleObserver @hide @OnLifecycleEvent(Lifecycle.Event.ON_ANY)

Slide 30

Slide 30 text

LifecycleRegistry Observer Lifecycle LifecycleOwner FragmentActivity, v4 support library Fragment @RestrictTo(LIBRARY_GROUP) public class SupportActivity extends Activity implements LifecycleOwner { … private LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);

Slide 31

Slide 31 text

public class MyLifecycleOwnerActivity extends Activity implements LifecycleOwner { private LifecycleRegistry lifecycleRegistry; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); lifecycleRegistry = new LifecycleRegistry(this); lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE); } @Override protected void onStart() { super.onStart(); lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START); } … @NonNull @Override public Lifecycle getLifecycle() { return lifecycleRegistry; } … ϥΠϑαΠΫϧϝιουͰ handleLifecycleEvent() ΛݺͿ

Slide 32

Slide 32 text

onSaveInstanceState onSaveInstanceState() onStart() UI onSaveInstanceState() onStop() FragmentActivity v4 support library Fragment onSaveInstanceState() CREATED

Slide 33

Slide 33 text

Lifecycle Extensions

Slide 34

Slide 34 text

Lifecycle extensions Ϟδϡʔϧͷ build.gradle dependencies { implementation "android.arch.lifecycle:extensions:1.0.0" } * LiveData, ViewModel ΋ extensions ʹؚ·Ε͍ͯ·͕͢ࠓճ͸औΓ্͛·ͤΜ https://developer.android.com/topic/libraries/architecture/adding-components.html

Slide 35

Slide 35 text

LifecycleService LifecycleOwner Service public class MyService extends LifecycleService { @Override public void onCreate() { super.onCreate(); final Lifecycle lifecycle = getLifecycle(); } }

Slide 36

Slide 36 text

ServiceLifecycleDispatcher Service Lifecycle LifecycleService LifecycleService public class LifecycleService extends Service implements LifecycleOwner { private final ServiceLifecycleDispatcher mDispatcher = new ServiceLifecycleDispatcher(this); @CallSuper @Override public void onCreate() { mDispatcher.onServicePreSuperOnCreate(); super.onCreate(); }

Slide 37

Slide 37 text

ProcessLifecycleOwner Lifecycle ON_CREATE ON_DESTROY ProcessLifecycleOwner.get() .getLifecycle() .addObserver(observer);

Slide 38

Slide 38 text

ProcessLifecycleOwner ON_START, ON_RESUME Activity ON_STOP, ON_PAUSE Activity * ஗Ԇ͸ destruction ࣌ͷΈ

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

0 appcompat-v7:26.1.0

Slide 41

Slide 41 text

1 Lifecycle current state Activity onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy(), onRestart(), onSaveInstanceState()) onCreate() 1 onSaveInstanceState() super.onSaveInstanceState()

Slide 42

Slide 42 text

@Override protected void onResume() { super.onResume(); Log.d("Lifecycle", "onResume : " + getLifecycle().getCurrentState().name()); } …

Slide 43

Slide 43 text

onCreate() onStart() onResume() onPause() onStop() onDestroy() onRestart() onCreate() 1 onSaveInstanceState()

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

2 LifecycleObserver Lifecycle.Event ON_CREATE, ON_START, ON_RESUME, ON_PAUSE, ON_STOP, ON_DESTROY, ON_ANY Lifecycle LifecycleObserver

Slide 46

Slide 46 text

final LifecycleObserver observer = new LifecycleObserver() { @OnLifecycleEvent(Lifecycle.Event.ON_START) public void calledWhenOnStart(LifecycleOwner source) { Log.d("Lifecycle", "ON_START : " + source.getLifecycle().getCurrentState().name()); } @OnLifecycleEvent(Lifecycle.Event.ON_ANY) public void calledWhenOnAny(LifecycleOwner source, Lifecycle.Event event) { Log.d("Lifecycle", "ON_ANY : " + source.getLifecycle().getCurrentState().name()); } … }; lifecycle.addObserver(observer);

Slide 47

Slide 47 text

2 2 Observer addObserver LifecycleObserver A : onDestory() removeObserver() B : ON_DESTROY LifecycleOwner Lifecycle removeObserver()

Slide 48

Slide 48 text

3 GenericLifecycleObserver onStateChanged() Lifecycle GenericLifecycleObserver GenericLifecycleObserver @hide @OnLifecycleEvent(Lifecycle.Event.ON_ANY)

Slide 49

Slide 49 text

4 Application onCreate() ProcessLifecycleOwner Lifecycle GenericLifecycleObserver Recent Apps Activity

Slide 50

Slide 50 text

final LifecycleObserver observer = new GenericLifecycleObserver() { @Override public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) { Log.d("Lifecycle", "onStateChanged : " + source + ", " + event.name()); } }; ProcessLifecycleOwner.get() .getLifecycle() .addObserver(observer);

Slide 51

Slide 51 text

Lifecycle.Event Recent Apps Activity Activity

Slide 52

Slide 52 text

RecentApps ProcessLifecycleOwner ON_CREATE Recent Apps ProcessLifecycleOwner ON_CREATE

Slide 53

Slide 53 text

5 RxJava2 AsyncTask STARTED UI

Slide 54

Slide 54 text

6 JobIntentService JobIntentService foreground Activity Toast https://developer.android.com/reference/android/support/v4/app/ JobIntentService.html

Slide 55

Slide 55 text

public class SimpleJobIntentService extends JobIntentService { private static final int JOB_ID = 1000; static void enqueueWork(@NonNull Context context, @NonNull Intent work) { enqueueWork(context, SimpleJobIntentService.class, JOB_ID, work); } @Override protected void onHandleWork(@NonNull Intent intent) { … } @Override public void onDestroy() { super.onDestroy(); // TODO: ΞϓϦ͕ foreground ͳΒμΠΞϩάςʔϚͷ Activity ʹભҠ͠ɺ // TODO: όοΫάϥ΢ϯυͳΒ Toast Λग़͢Α͏ʹ௚͢ Toast.makeText(this, "All work complete", Toast.LENGTH_SHORT).show(); } }

Slide 56

Slide 56 text

Slide 57

Slide 57 text

7 register, unregister, ON_RESUME register ON_PAUSE unregister ON_DESTROY Lifecycle Activity onCreate() Lifecycle

Slide 58

Slide 58 text

public class SensorActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); final SensorHandler sensorHandler = … getLifecycle().addObserver(sensorHandler); } public static class SensorHandler implements SensorEventListener, LifecycleObserver { private final SensorManager mSensorManager; private final Sensor mAccelerometer; SensorHandler(SensorManager sensorManager) { mSensorManager = sensorManager; mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); } … } }