« 2009年09月 | メイン | 2009年11月 »

2009年10月 アーカイブ

2009年10月06日

IMoNi 1.3.0

大変お待たせしました。i-mode.netの変更に対応したものをマーケットにリリースしました。私が長期旅行中だったためご迷惑をおかけしました。昨日帰国しました。フランスではネットにつなげやすかったのですが、イタリアではネットにつなげる環境をうまく手に入れられなかったので、お返事もできませんでした。どうもすみません。

リリースしたものは、kooさんが対応して下さった野良アプリとほぼ同じですが、前のバージョンでエクスポートしたメールがインポートできないという不具合の修正も加えています。

・iモード.netのレイアウト変更対応
・フォルダ機能の追加

2009年10月16日

IMoNi 1.4.0

たくさんのコメント、ご意見、ご感想、ありがとうございます。最近忙しくてコメントを満足に返せておらず申し訳ありません。頂いたご意見を基にして、少しずつ拡張していきます。
IMoNi 1.4.0をリリースしました。

・iモードセンターのメールBOXが一杯でiモード.netへログインできないときに、そのことを知らせるよう修正
・画像付きメール(デコメなど)の表示
要望が非常に多いので実装してみました。うーん、いまいちイケてない気がしますが、動くのは動いてそうですのでとりあえず公開します。無いよりはマシ程度ですが、もし宜しければお使い下さい。お使いになる場合は下記【説明】【注意事項】をお読み下さい。


【説明】

デコメなどの画像付きメールは、リストの右側(スターの左側)に、小さな画像マークが出るようになっています。



メール一件の内容を見ても、今までと同様に画像は無視されています。



この画面のメニューから「画像も含めて表示」を選ぶことで、画像も含んだメール全体をHTMLとして確認することができます。




【注意事項】

  • 画像は「画像も含めて表示」を押したときにiモード.netへ取りに行きますので、通信が発生します。通信圏内にいなければ、画像を見ることができません。
  • iモード.netへ接続しているセッションが有効な状態でなければ画像が表示できません。通信圏内にいるにもかかわらず画像が表示されない場合は、iモード.netへのセッションが無効になっている可能性がありますので、一度「ただちにチェック」などでメールチェックを行い、セッションを確立してから、再度画像の表示を試みて下さい。
  • この機能は、本バージョンのIMoNiをインストールしてから新たに受信したメールにのみ有効です。前バージョンで受信済のメールには適用されません。
  • 画像の形式によっては、本来アニメーションするはずのものがアニメーションしないことがあるようです。(おそらくアニメーションGIFがダメなようです。)

2009年10月22日

IMoNi よくある質問(FAQ)

本ページの内容は こちら に移動しました。

2009年10月23日

落ちないServiceの作り方

 最近このBLOGがIMoNiのサポートサイトと化しているので、たまには開発者向けの投稿でも書いてみようと思います。

 何らかを定期的に監視し続けるときのように、ずっと動き続けるService(システムが提供する機能というわけではなく、AndroidのServiceコンポーネントです。)を作ることがあると思いますが、私が初めて取り組んだときは、意外とハマりどころがあるなと思いました。このことは、いつの間にか落ちていたり、停止できなかったりするアプリを目にすることが意外と多いことからも頷けると思います。

 多分いろいろな実装方法があると思いますし、処理の特性によって最適な方法は異なるかもしれませんが、私が一番簡単じゃないかなと思っているやり方を簡単に述べます。他にもアイディアや観点があれば是非教えて貰えるとうれしいです。


・息の長いThreadよりonStartとAlarmManagerを使う
 どちらも試しましたが、後者の方がコードが簡潔になりますし、バグが混入しにくいような気がします


・onStartから作業用Thread(Task)を起こす
 onStartで時間をかけすぎると(多分5秒以上)怒られるので、時間がかかる場合は別スレッドで行い、onStartは直ちに終わるようにします。ちなみに生Threadよりもjava.util.concurrent.ExecutorServiceなどを使ったほうが簡単かもしれません。例外の取り方に癖があるので気をつけます。
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/concurrent/Callable.html


・定期的に処理を行う場合は、作業用Threadの処理終了時にAlarmをset
 作業用Threadは、一回処理をして終わるようにします。定期的に処理したい場合はThreadが終わる時にAlarmに登録します。


・止める処理もonStart
 止めるときの処理もonStartでやるのがいいような気がします。intentのActionで振舞いを分けるイメージです。以下のような感じです。止める時も呼び側がstartServiceなのか、と少し誤解を招きそうですが、僕はこうしています。

public void onStart(final Intent intent, int startId) {
 super.onStart(intent, startId);
  if (ACTION_EXECUTE.equals(intent.getAction())) {
   // スレッド起こして処理実行
  }
  else if (ACTION_STOP.equals(intent.getAction()) ){
   // 終了処理(Alarmのキャンセルなど)
  }
  ・・・
}

もちろんバインドして終了処理を呼ぶ方法もありだと思います。


・必要に応じてwakelockを使う
 Alarmはpartial wakelockを取得してないとスリープ時に呼ばれないことがあるようです。またwifiなどもスリープする可能性があるので、処理の特性に応じて適宜最小限のwakelockをかけます。


・・・ところで、Androidにはちょっと厄介な特性があります。それは、メモリが足りないなどの諸々の理由でServiceが勝手に殺されることがあるということです。


・onLowMemoryは期待しない
 メモリが少なくなるとonLowMemoryメソッドが呼ばれます。このメソッドをうまく活用すればよいのですが、あまり役に立ちません。なぜなら、このメソッドはちょっとしたことですぐ呼ばれるからです。


・onDestroyも期待しない
 じゃ、死ぬときにonDestroyが呼ばれると思いきや、呼ばれずに死ぬことの方が多いです。なので、ここにコードを書いてもあまり意味はありません。


・各処理の終了時に現在の状況を保存しておき、onCreateで再startする
 つまり死ぬことを予め予期できないし検知できないので、いつ死んでもいいように、なんらかの処理を終えたときに最新の状況を逐次記録(永続化)しておきます。Serviceのプロセスは殺されたとしても、しばらくするとまた別のプロセスが勝手に生成されます。しかしこの時点ではServiceはまっさらな状態なので、以前の最新の状況を読み込んで、何をやっていたかを思い出してから再度動き続けるようにします。

以上です。
繰り返しますが、他にも「おれはこうやってる」などのアイディアや観点があれば是非教えて貰えるとうれしいです。

2009年10月28日

IMoNi 1.4.2で受信できなかった方へ

昨夜から、お使いの端末の環境によってはメールが受信できないという問題が発生していました。(多分クリーンインストールせずにアップデートするとダメだったっぽいです。)
ご迷惑をおかけしました。さきほど1.4.3をリリースしましたので、マーケットからダウンロードしてお使い下さい。
今回はDoCoMoさんに変更があったわけではなく、私と、もう一人のIMoNi開発者kooさんとの間で発生してしまったミスです。
ごめんなさい。

About 2009年10月

2009年10月にブログ「GrandNature」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2009年09月です。

次のアーカイブは2009年11月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。