Slide 1

Slide 1 text

Realm meetup #22 [email protected]

Slide 2

Slide 2 text

#realm_jp [email protected]

Slide 3

Slide 3 text

Makoto Yamazaki Realm Inc. / uPhyca Inc. [email protected]

Slide 4

Slide 4 text

Recent Updates [email protected]

Slide 5

Slide 5 text

Realm Java 3.3.1 (was 3.0.0) [email protected]

Slide 6

Slide 6 text

Realm Java 3.1(RMD) • ٯํ޲ͷؔ࿈Λαϙʔτ⭐ • Fine-grained Object NotificationରԠ⭐ • RealmObjectͷϦεφʔ͕ແବʹτϦΨʔ͞ΕΔͷΛमਖ਼ • commitͷࡍɺಉ͡εϨου্ͷϦεφʔ͕ଈ࠲ʹݺ͹ΕΔΑ͏ʹͳͬͨ • distinct͕ΠϯσοΫεͷແ͍ϑΟʔϧυʹରͯ͠΋࢖༻Մೳʹ • SamsungͷҰ෦ͷσόΠεͰmemmove໋ྩ͕յΕ͍ͯΔ໰୊ʹରॲ#3651 • Android 7.1.1Ͱ֎෦ετϨʔδ্ͷϑΝΠϧΛ։͚ͳ͍໰୊ʹରॲ#4461 • كʹgetFilesDir()͕nullΛฦ͢໰୊ʹରॲ#4493 • OrderedRealmCollectionSnapshot.get(int)͕ޡͬͨςʔϒϧΛࢀর͢Δ#4554 [email protected]

Slide 7

Slide 7 text

Realm Java 3.1(RMP) • ϑΝΠϧϑΥʔϚοτมߋͷͨΊɺ1.3.0Ҏ্ͷαʔόʔ͕ඞཁ • ΫϥΠΞϯτϦηοτ͕ൃੜͨ͠ࡍʹɺچσʔλϕʔεͷύε͕औಘՄೳ • ೝূURL͕pathΛ࣋ͨͳ͍৔߹ɺࣗಈతʹ /auth͕෇༩͞ΕΔ • ηογϣϯ։࢝ޙͷϩάϨϕϧมߋΛਖ਼͘͠൓ө#4337 • ௨৴͕෮׆ͨ͠ࡍʹɺಉظͷ࠶։Λ࠷దԽ#4141 [email protected]

Slide 8

Slide 8 text

Realm Java 3.2(RMD) • transientͳϑΟʔϧυΛαϙʔτ(@Ignoreѻ͍) • Realm.refresh()ɺ DynamicRealm.refresh()Λ෮׆ • Ream.getInstanceAsync()ɺDynamicRealm.getInstanceAsync()Λ௥Ճ⭐ • DynamicRealmObject͕Ͱ΋ٯํ޲ͷؔ࿈Λαϙʔτ • Read Only RealmΛαϙʔτ • ҉߸Խ͞ΕͨRealmͰͷΫϥογϡमਖ਼#4343 • τϥϯβΫγϣϯ֎Ͱͷมߋʹର͢Δྫ֎ϝοηʔδมߋ [email protected]

Slide 9

Slide 9 text

Realm Java 3.2(RMP) • SyncUser.isAdmin()ɺSyncUser.changePassword()Λ௥Ճ • SyncConfiguration.Builder.waitForInitialRemoteData()Λ௥Ճ • ϞσϧΫϥεʹଘࡏ͠ͳ͍ϑΟʔϧυΛਖ਼͘͠ແࢹ͢ΔΑ͏मਖ਼#4658 [email protected]

Slide 10

Slide 10 text

Realm Java 3.3(RMP) • SyncConfigurationʹtrustedRootCA()ͰRootCAͷূ໌ॻΛ౉͢ػೳΛ௥Ճ • SyncConfigurationʹSSLͷূ໌ॻݕূΛແޮԽ͢ΔػೳΛ௥Ճ • 3.2Ͱमਖ਼ͨ͠ϞσϧΫϥεʹଘࡏ͠ͳ͍ϑΟʔϧυνΣοΫΛ࠶౓मਖ਼#4706 [email protected]

Slide 11

Slide 11 text

ٯํ޲ͷؔ࿈αϙʔτ [email protected] public class Person extends RealmObject {
 public String name;
 public Dog dog;
 } 
 public class Dog extends RealmObject {
 public String name;
 public int age; @LinkingObjects("dog") public RealmResults owners;
 } RealmResults owners; owners = realm.where(Dog.class).findFirst().owners; owners.size(); ͜ͷΦϒδΣΫτΛdogϑΟʔϧυ͔Β ࢀর͍ͯ͠ΔશͯͷPersonΦϒδΣΫτ

Slide 12

Slide 12 text

ඇಉظͳRealmΠϯελϯεͷऔಘ [email protected] final RealmConfiguration config = new SyncConfiguration.Builder(user, uri) .waitForInitialRemoteData() .build(); Realm.getInstanceAsync(config, new Realm.Callback() { @Override public void onSuccess(Realm r) { realm = r; showData(); } });

Slide 13

Slide 13 text

Fine-grained Object Notification [email protected] public interface RealmObjectChangeListener { void onChange(T t, ObjectChangeSet changeSet); } public interface ObjectChangeSet { boolean isDeleted(); String[] getChangedFields(); boolean isFieldChanged(String fieldName); }

Slide 14

Slide 14 text

Google I/O 2017 [email protected]

Slide 15

Slide 15 text

Google I/Oͱ͸ • Google͕ຖ೥։࠵͍ͯ͠Δ։ൃऀ޲͚ΧϯϑΝϨϯε • Googleຊࣾྡͷ໺֎Πϕϯτձ৔(γϣΞϥΠϯ ΞϯϑΟγΞλʔ)Ͱ։࠵ • ΩʔϊʔτɺηογϣϯɺαϯυϘοΫεɺΦϑΟεΞϫʔɺίʔυϥϘ • ࠷ۙ͸AndroidɺػցֶशɺVRத৺(Ϋϥ΢υܥ͸Google Could Next΁ • ηογϣϯ͸ଈ࣌youtubeͰެ։͞ΕΔ • Ҏલ͸ߴֹͳ͓౔࢈͕഑ΒΕ͍͕ͯͨɺ࠷ۙ͸߇͑Δ܏޲ [email protected]

Slide 16

Slide 16 text

Architecture Components http://developer.android.com/arch [email protected]

Slide 17

Slide 17 text

Architecture Components • Google͕ਪ঑͢ΔΞʔΩςΫνϟͷΨΠυͱπʔϧ (ਪ঑Ͱ͋ͬͯඞਢͰ͸ແ͍ • LifecycleOwner, LifecycleObserver, ViewModel, LiveData, Room • ঺հಈը https://www.youtube.com/watch?v=vOJCrbr144o&t=25s • ϥΠϑαΠΫϧʹԠͨ͡ॲཧ͕هड़͠΍͘͢ͳΔ • αϯϓϧϓϩδΣΫτ https://github.com/realm/realm-java/pull/4685 • ͍ۙ͏ͪʹRealmͷϒϩάͰऔΓ্͛·͢ [email protected]

Slide 18

Slide 18 text

Lifecycle [email protected] https://developer.android.com/topic/libraries/architecture/lifecycle.html#lc

Slide 19

Slide 19 text

LifecycleObserver [email protected] public class MyObserver implements LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) void onCreate() { } @OnLifecycleEvent(Lifecycle.Event.ON_START) void onStart() { } @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) void onResume() { } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) void onPause() { } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) void onStop() { } @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) void onDestroy() { } } public class MyActivity extends LifecycleActivity { @Override protected void onCreate(Bundle savedInstanceState) { ... getLifecycle().addObserver(new MyObserver()); } }

Slide 20

Slide 20 text

ViewModel [email protected] https://developer.android.com/topic/libraries/architecture/ viewmodel.html#the_lifecycle_of_a_viewmodel

Slide 21

Slide 21 text

ViewModel [email protected] public class ExampleViewModel extends ViewModel { private final Realm realm; private final LiveRealmObject livePerson; public ExampleViewModel() { realm = Realm.getDefaultInstance(); livePerson = new LiveRealmObject<>(realm.where(Person.class) .findAllSorted("name").first()); } public LiveRealmObject getPerson() { return livePerson; } @Override protected void onCleared() { realm.close(); super.onCleared(); } }

Slide 22

Slide 22 text

ViewModel [email protected] @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(...); exampleViewModel = ViewModelProviders.of(this) .get(ExampleViewModel.class); exampleViewModel.getPerson() .observe(this, person -> updateViews(person)); }

Slide 23

Slide 23 text

Kotlin support [email protected] https://goo.gl/maps/fL44p7ang2r

Slide 24

Slide 24 text

Realm Javaͷݱঢ় • Kotlin͸αϙʔτ͍ͯ͠·͢ʂ • ͞ΒʹKotlinαϙʔτΛॆ࣮ͤ͞Δํ޲ • POC: Kotlin Extension Library https://github.com/realm/realm-java/pull/4684 • Realm಺ͰͷKotlinͷར༻ͷ֦େ • Enable Kotlin for unit tests https://github.com/realm/realm-java/pull/4719 [email protected]

Slide 25

Slide 25 text

ݱঢ়ͷKotlinαϙʔτ open class User : RealmObject() { @PrimaryKey var id: Long = 0 var name: String = "" var description: Sting? = null } [email protected]

Slide 26

Slide 26 text

Kotlinαϙʔτͷॆ࣮ • POC: Kotlin Extension Library #4684 ͰΞΠσΟΞืूத • KClass, KPropertyΛαϙʔτ͢ΔͨΊͷ֦ுؔ਺ • @NotNull, @NullableΞϊςʔγϣϯ෇༩ʹΑΔ਌࿨ੑ޲্ • Ϟσϧఆٛʹ࢖ΘΕͨඇNullܕΛ@Requiredѻ͍ʹ [email protected] Any idea?

Slide 27

Slide 27 text

Ξϯέʔτͷճ౴Λ͓ئ͍͠·͢ [email protected] http://bit.ly/RealmJP_22