[Android] Architecture ComponentsのViewModelは如何にしてRotationを生き残るか

TL;DL; retainInstance = trueなFragmentにキャッシュされているので、Activity/Fragmentが本当に殺されるまで生き残ることができる。 Google I/O 2017で、Architecture Components という新しいライブラリ群が発表されました。 LiveData, ViewModel, LifecycleObserver, LifecycleOwner, Roomといったこれらのライブラリは、開発者がより強固で、テスタブルで、かつメンテナンス性が高いアプリケーションを作るための手助けとなるべく作られています。 今回はその中でもViewModelについて少し調べてみました。 What is ViewModel? 詳しい説明はViewModelのリファレンスに譲りますが、 »

2016年を振り返って

2016年もあと一時間半くらいですし、振り返りなどやります。 仕事 今年は主に改善業務をやっていました。 大体下記のような感じです CIでAndroidLint/ChecyStyleかける モデルクラスの大改修 APIリクエスト周りの処理をモデルクラスから切り出す Realm周りの処理をモデルクラスから切り出す モデルクラスが互いに依存しあわないようにユースケース層を作る テスト、テスト、そしてテスト モデルクラスがAPIリクエストをすればDBアクセスもして、モデルクラスが別のモデルクラスをメンバー変数に持ってたり…と結構マッチョな感じになっていました。 そこで、単一責務を意識してAPIリクエストをするクラスやDBアクセスするクラスを作り、モデルクラスはそれらを相互に橋渡しするだけのクラスにしました。最近流行りのレイヤード・アーキテクチャってやつです。 また、モデルクラスが互いに依存せず、それぞれの役割に徹するためにユースケースクラスを用意しました。モデルクラス間で行ったり来たりするような処理はここに書いていく感じです。 »

repeatWhenでfilterを使ってもonCompletedは呼ばれない

掲題の通りです TL;DR Observable#repeatWhen使って複雑な繰り返し判定するときはObservable#filterじゃなくてObservable#takeWhileを使うとonCompletedまで呼ばれる 大量のデータをローカルに同期するAPIがあって、ページングの要領で複数回APIを叩いてすべてのデータを同期するとします。 こんな感じのコードなら動きます。 boolean isLoading = false; public Completable sync() { return Observable.defer(() -> { if (isLoading) { return Observable.empty( »

CircleCIでDocker v1.10.0を使う

CircleCIに入ってるDocker、ちょっとバージョンが古いみたいでdocker runとかdocker pullとかするとhub.docker.comではなくdocker.ioに見に行ってしまいます。 で、docker.ioはすでに廃止されているのでdocker.comにリダイレクトされ、docker.comの下に指定したimageがあるかどうか確認してしまうので、下記のようなエラーになってしまいます。 Pulling repository docker.io/yshrsmz/docker-whale Tag latest not found in repository »