過去の自分のツイートをカレンダー形式でふりかえることができるツイッタークライアント TwitCal の 3.0をリリースしました。
前回のリリースから実に4ヶ月が経過してしまったのですが、バグ修正以外にもいくつか新しい機能を追加したので、ぜひ使ってみてください!
新機能
過去ツイートお知らせ機能
1日1回、数カ月前のツイート内容を通知してくれる機能です。 「あー、数カ月前はこんなこと考えていたんだ」とか、ちょっとした振り返りに使える機能 です。
通知できるツイートは1ヶ月、3ヶ月、6ヶ月の3種類選択可能で、通知時間も任意に設定できます。
ツイートシェア、別クライアントへの移動
過去のツイートから別クライアントを辿ってツイートのやり取りを振り返ったり、リツイートしたユーザーの情報を追っかけたい という要望をいただいたので、追加しました。ツイートのリンク自体のシェア、別クライアントへの移動等が可能になっています。
内部的な設計の話
サヨナラAsyncTaskLoader、こんにちはThreadExecutor
これまでツイートデータのロードにAsynkTaskLoaderを利用していたのですが、このたびThreadExecutor( + Eventbus)に移行しました。 理由としては、
- バックグラウンドから起動し、再ロードした時にクラッシュする不具合が発生していて、AsynkTaskLoaderが起因だった(Activity上のデータをチェックしてからロードするため、場合によってNPEが発生していた)り、挙動が不安定だった
- Activity上にロード処理が入るので、美しくない
というところです。 ThreadExecutorにすることによって、ロードのロジックがActivityから分離できたことと、インタフェースがすっきりしたのでNPEの不具合をなくせたメリットは非常に大きいです。
実装としては以下のようなExecutorServiceを実装したBaseLoaderを作成し、それを継承したTweetLoaderを作りました。
public abstract class BaseLoader<T> { private final ExecutorService mExecutor = Executors.newSingleThreadExecutor(); public void start(final T params){ mExecutor.execute(new Runnable() { @Override public void run() { call(params); } }); } abstract protected void call(T params); }
call内でデータ取得がOKだとEventBusでActivity側に結果を返し、Viewを更新するようになっています。
Realm バージョンアップ
0.76 -> 0.82にしました。特に困ったことはなくスムーズに移行できたと思います。また、自分のrealm.close()の設定方法があまくて、別スレッドでrealmをcloseしたことによる不具合などが発生していましたが、そういった修正も実施しました。
Realm.closeしないことを恐れてonDestoryとかでも念のためにcloseしてたら、全く無関係なところでThis Realm instance has already been closed...って落ちるようになってしまた。(続く)
— Tomoaki Imai (@tomoaki_imai) 2015年9月6日
(続き)リファレンスカウントだからUIスレッドでcloseかませちゃうと別のところで動かすインスタンスが閉じちゃってエラーが発生すると。だから必ずgetInstanceと対にしなきゃいけないということを再確認した。
— Tomoaki Imai (@tomoaki_imai) 2015年9月6日
( ※なお、上のツイートはTwitCalを使って検索、リンクを添付しました :)
あれっ
こうして振り返ると全然アップデートしてないぞ(焦) なにはともあれ、自分の過去のツイートを見るのって結構面白かったりするので、使ってみてフィードバックもらえると幸いです。