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&

2015年振り返りと2016年について

年も変わってしまいましたが2015年の振り返りなどやってみます。 仕事 始めてAndroidエンジニアとして参加したプロジェクトがクローズ(というか開発なし現状維持運用)して、別のプロジェクトに移った。Androidやりたいよーって言ってたらWebフロントエンドで配属された。まったく納得できなかったけど、いろいろあって数ヶ月でAndroid開発に戻ったのでまあ良かったかな、という感じ。 とはいえ、数ヶ月だけやっていたWebフロントエンド作業の中でReactとかElectronとか最近流行りの技術に触れ、個人プロダクトのOmnitweety for Chromeに還元したりできたので結果的に良かったとは思う。あと静的サイトジェネレータ系検討してる人、Hexoだけは使うなよ、絶対だ。 個人開発 毎年OSS活動したいなーとか個人でもアプリ開発したいなー、とか思いながら活動できてなかったんだけど、今年はいろいろできたと思う。全体的なGithubでのアクティビティはこちらで確認してもらうとして、主だったところは下記三点 Omnitweety for Chrome ChromeのOmniboxからツイート・URLをシェアできるツイート専用Twitterクライアント。ブログエントリはこちら 画像検索してファボるやつ FabricのTwitter Kitを試してみたくて作ったAndroidアプリ。

「まったりAndroid Framework Code Reading #2」に参加してきた

ちょっと前の話ですが、まったりAndroid Framework Code Reading #2というもくもくコード読む会に行ってきました。 個々人でテーマ決めて、最後に成果を報告しあう感じ。 テーマ 私は、 WindowManager を読んでみることにした。最近公開したアプリが他のアプリにの上にオーバーレイするタイプのモノで、 WindowManager をちょっと触ったからだ。 成果 WindowManager のコード自体はすぐに見つかった。 android.view.WindowManager.javaがインターフェイスで、実態は android.view.WindowManagerImpl.java こっちのようだ。 ただ、基本的に処理は全て android.view.WindowManagerGlobal.

TwitterにURLを共有するAndroidアプリ、Omnitweetyを公開した

掲題のとおり、アプリをGoogle Play Storeに公開した。 名前は"Omnitweety"。「オムニツイーティ」と読む。 機能はホントにシンプルで、「ブラウザ系アプリのシェア機能から、ワンタップでURLをTwitterに共有する」だけだ。 ブラウザの共有からOmnitweetyを選択 画面下部にポップアップが表示される。あとは待っていれば自動でTwitterに共有される。真ん中の青いボタンをタップすれば即座に共有される。 もし共有する前にコメントを入れたい場合は、ポップアップの鉛筆アイコンをタップすれば編集画面が起動する。(文字数はURL短縮を考慮) 操作は基本的にこれだけだ。あとは設定画面で"NowBrowsing:"の部分(ヘッダー)を編集できる。 モチベーション 私はTwitterにURLをシェアすることが結構あるんだけど、その際のフローは大体下記のとおりだ。 ブラウザのシェア機能からTwitterクライアントアプリを選択する クリップボード管理アプリからヘッダーに使ってる定型文をコピーする Twitterクライアントの入力欄に貼り付ける タイトルが長かったら適度に削除する 共有する