際際滷

際際滷Share a Scribd company logo
RealmAndroid で
Realm を聞ってみよう
Introduction to Realm for Android
Application Development Division
Android Team, Ryutaro Miyashita
2015.03.14
RealmRyutaro Miyashita
Mobile Application Engineer / ChatWork
DroidKaigi は鯛ちました
Realm
ChatWork とは
ビジネス鬚韻離船礇奪肇挑`ルです
秘芙方 60,000 を融篤
謹Nが秘り住じる寄きな二Iや、掲 IT 狼の嶄弌二Iを嶄伉に秘
旋喘室gはアグレッシブ
Realm をはじめとして、Scala や巓x SaaS, AWS などをフル試喘
Realm
Realm
1. NoSQL 侏の DB + ORM
2. C++ uの Realm-Core
3. iOS /Android I
4. とても堀い!
RealmRealm を聞ってみよう
檎艶温鉛馨聞い兵めるのは酒g
Realm
build.gradle に峰して Sync する
dependencies {
compile 'io.realm:realm-android:0.80.0'
}
Realm
モデルをく = テ`ブル協xをく
public class User extends RealmObject {
@PrimaryKey
private long id;
@Index
private String name;
// Getter と Setter は福待
}
Realm
Realm realm = Realm.getInstance(/* Context */);
// Retrolambda
realm.executeTransaction(_realm -> {
User user = _realm.createObject(User.class);
user.setId(1);
user.setName("John Doe");
});
realm.close();
トランザクションの嶄でオブジェクトを恬る
Realm
Realm realm = Realm.getInstance(/* Context */);
User user = realm.where(User.class)
.equalTo("id", 1)
.findFirst();
realm.close();
メソッドチェインでクエリを恬ってオブジェクトを函り竃す
iOS 井では NSPredicate like な碧だが、Android ではクエリビルダ
檎艶温鉛馨麿の喟A晒字更との曳熟
Realm
Realm SQLiteShared
Preferences
g
XML KVS
Wい
中宜
RDBMS
堀い
g
NoSQL RDB
堀い
いいとこ函り:)
Realm
Realm ActiveAndroid
ORM (SQLite)
ActiveRecord
Wい
g
NoSQL RDB
堀い
いいとこ函り:)
Realm
兜豚晒rg[ms]
0
4000
8000
12000
16000
Realm ActiveAndroid
15,544 ms
5,054 ms
Insert 周方 10,000 周
Nexus 4 / Android 5.0.1
JSON ★ Object
RealmgHに Realm を聞うなら
檎艶温鉛馨圧催晒
Realmbyte[] key = new byte[64];
new SecureRandom().nextBytes(key);
Realm realm = Realm.getInstance(/* Context */, key);
byte 侏の塘双をLさ 64 で恬る
SecureRandom#nextBytes を聞って岱方バイトを函り竃す
圧催晒を聞っても堀業にそこまで唹しない!
Realm
兜豚晒rg[ms]
0
4000
8000
12000
16000
Realm ActiveAndroid
15,544 ms
5,054 ms
Insert 周方 10,000 周
Nexus 4 / Android 5.0.1
JSON ★ Object
◎
圧催晒を聞ったY惚
Realmbyte[] key = new byte[64];
new SecureRandom().nextBytes(key);
Realm realm = Realm.getInstance(/* Context */, key);
ドキュメントとサンプルの秤鵑燐栽來が函れていない
Key の隠贋圭隈は戻幣されていない
ドキュメントは
32 になっている
サンプルはgな
Random になっている
どこかに隠贋したい
Realm
Key を恬ったらファイルにして隠贋する
Key ファイルがあればiみ竃して byte 塘双に鯉{する
byte[] key;
File keyFile = context.getFileStreamPath(FILE_NAME);
if (keyFile.exists()) {
key = Files.readFromFile(keyFile, 64);
} else {
key = new byte[64];
new SecureRandom().nextBytes(key);
Files.byteToFile(context, key, FILE_NAME);
}
http://goo.gl/GIK2qXFiles ★
RealmRealm オブジェクト
Realm
Realm realm;
try {
realm = Realm.getInstance(/* Context */, key);
} finally {
if (realm != null) realm.close();
}
Realm を荷恬するときは Realm#getInstance をU喇する
Realm オブジェクトは聞いKわったら close が駅勣である
Realmtry (Realm realm = Realm.getInstance(/* Context */, key)) {
// do something
}
Android 4.4 參貧であれば try-with-resources が聞える
でも、4.4 參貧をタ`ゲットにできるのは謹蛍、栖弊
Realm
public class MainActivity extends ActionBarActivity {
private Realm mRealm;
@Override
protected void onCreate(Bundle savedInstanceState) {
mRealm = Realm.getInstance(getApplicationContext());
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mRealm != null) mRealm.close();
}
}
Activity の嶄であれば、インスタンス篳として隠隔してしまう
onResume のタイミングで null チェックすると措いかも
onDestroy のタイミングで close する
檎艶温鉛馨マルチスレッド
Realm
Realm realm = Realm.getInstance(/* Context */, key);
User user = realm.where(User.class)
.equalTo("id", 1)
.findFirst();
// Retrolambda
new Thread(() -> {
Log.d(TAG, user.getName());
}).start();
realm.close();
匯咾そうではある
Realm
// Retrolambda
new Thread(() -> {
Realm realm = Realm.getInstance(/* Context */, key);
User user = realm.where(User.class)
.equalTo("id", 1)
.findFirst();
Log.d(TAG, user.getName());
realm.close();
}).start();
Thread の嶄で Realm オブジェクトそのものから函誼し岷す駅勣がある
Realm オブジェクトの close 梨れに勣廣吭
檎艶温鉛馨廣吭したいところ
Realm
public class User extends RealmObject {
@PrimaryKey
private long id;
@Index
private String name;
// Getter と Setter は福待
}
モデルのフィ`ルドに聞える侏は崙sがある (リンク)
畠てのフィ`ルドは private かつ、Getter / Setter が駅勣である
equals, hashCode, toString も根めて、メソッドをO崔できない
モデルの崙s
Realm0.78
0.77
0.79
0.80
インメモリオブジェクト
executeTransaction メソッド
圧催晒C嬬
PrimaryKey
INSERT or Update (´orUpdate メソッド)
static フィ`ルド Realm モデル
0.01 のアップデ`トが^爾
Realmbyte[] key = new byte[64];
new SecureRandom().nextBytes(key);
Realm realm = Realm.getInstance(/* Context */, key);
哂Z井のドキュメント = 恷仟 』 屎しい秤
GitHub のサンプル 』 屎しい秤
ドキュメントは
32 になっている
サンプルはgな
Random になっている
ドキュメントとサンプルコ`ド
Mみ栽わせ + 編^ + GitHub の changelog / Issues / Pull Request をiむ
檎艶温鉛馨恷朔に
Realm
1. Realm は返Xに兵められる
2. スタンドアロンアプリに恷m
3. 掲械に互堀に嘛する
4. まだ碧や嘛は廣吭が駅勣
檎艶温鉛馨傚
Realm
ChatWork でPきませんか?
1. Android
Realm, RxJava, RxAndroid
2. iOS
ReactiveCocoa, Mantle
3.Web
Scala, spray, DDD, ES6, React.js
和のキ`ワ`ドにピンときた圭、お蕗がけ or エントリを!

More Related Content

Android て? Realm を聞ってみよう