続:Realmインスタンスを、Observableのunsubscribe時に同じスレッドでunsubscribeする

前回の続きです。 Observable#usingを使うと、Observableのunsubscribe時にRealmインスタンスを同じスレッド上で閉じることができるよ、と前回の記事で書きました。 結論から言うと前回のコードだけでは足りませんでした。 大体の場合において同じスレッド上でcloseされるのですが、たまに別スレッドで閉じられてしまう、ということがわかりました。 Twitter上でうんうん言いながらRxJavaのコードを読みながら再現するコードを書こうとしてたら、@hydrakecatさんが捕捉してくださり、さくっと再現させてくれました。 やはり頑張ってRxJavaとRealmのコードを読み込むしかない— せーい(yshrsmz) (@_yshrsmz) 2016年7月13日 @_yshrsmz うーん、再現したかも。とりあえず、このコードを何回も実行するとたまに main スレッドでクローズされますね。https://t.co/EHda8VQeEh— Hiroshi Kurokawa (@hydrakecat)

RealmインスタンスをObservableのunsubscribe時にcloseする

※2016/07/21更新: このコードだけだと必ずしも同じスレッドでcloseされないことがわかりました。"続:Realmインスタンスを、Observableのunsubscribe時に同じスレッドでunsubscribeする"もご確認ください。 RealmはRxJavaを公式でサポートしていますが、公式のRxサポートが動くのはUIスレッドなど、Looperのあるスレッドだけです。 そこでRealmObjectをObservableで返すメソッドを自前で書いたりするわけですが、Rx使ってるとメソッドがどのスレッドから呼ばれるかわからないので、Realmをどこでcloseしたらいいかわからなくなりがちです。 そんな状態だとclose漏れのRealmインスタンスが発生して、OutOfMemoryExceptionが発生してしまいます。 最初はdoOnUnsubscribeでやればいいじゃん?って思ってたんですが、doOnUnsubscribeはObserverのスレッドで呼ばれるみたいで、スレッド違いでエラーになってしまいます。 public Obseravble<Realm> asObservable() { return Observable.defer(new Func0<Observable&

Android Lintで特定のディレクトリ内ファイルをすべて無視するには

Suppressing Lint Warnings - Android Studio Project Site Support libraryや他のライブラリからコード持ってきて一部書き換えてるだけだからAndroid Lintの対象にしたくないって時に有効 モジュールのルートにlint.xmlを置くとAndroid Lintかけるときにそこの設定を見てくれる。 上のサイトにはプロジェクトのルート、Manifestファイルと同階層に置けって書いてあるけどモジュールのルート(app/lint.xmlとか)です。 最初は全部のissue書かなきゃなのかなーめんどくさいなーって思ってたらid="all"で全部のissueを無視できるらしい <?xml version="1.0" encoding="UTF-8"?> <lint&

Wakatimeでプロジェクトの名前を指定する

Wakatimeはプログラミングしている時間を集計して、プロジェクト毎・言語毎にグラフ化してくれるツールです。 AtomやSublimeText, Jetbrains製の各種IDE、Eclipse, Vim等様々なエディタのプラグインを提供しているので、言語毎にエディタを使い分けている方でも大体カバーできるんじゃないかと思います。 私の場合はAndroid Studio, IntelliJ IDEA, Atomで利用しています。 一週間毎に今週はどのプロジェクトでどのくらいコーディングしましたよー、っていうレポートを送ってくれるので週次の振り返りに重宝します。あとは大体の工数把握に使ったりとか。 Omnitweetyを作った時も、wakatimeでコーディングした時間管理してました 集計時のプロジェクト名ですが、大体はフォルダ構造から自動で取得してくれるのですが、たまにうまく取得できず一つのプロジェクトが複数の名前で分けて集計されてしまったりします。 任意の名前でまとめられないのかなーって調べてたら、公式のFAQにしっかりと記述がありました Wakatimeでは3つの方法でプロジェクト名を指定できるそうです。 git, subversion等のバージョン管理システムを利用する git init で初期化したフォルダの下が一つのプロジェクトとして認識されるようです。プロジェクト名はトップのフォルダ名です。 Wakatimeサイト上の設定ページ ファイルパスにこの文字列が含まれていたらこのプロジェクト、