« タイミングが | トップページ | ADP1 で ad-hoc 接続成功! »

2009.09.11

En2ch の2重書き込みに見える問題

が、やっと再現できた。(1週間かかった^^;)

メモリ不足だと、結果を受けるべき Activity が勝手に殺されて、
onCreate() から始まっちゃうんだね。

Activity A から startActivityForResult() を使って
結果を返してもらうように Activity B を起動した場合、

普通は、B を終了させたら、A の onActivtyResult() に結果が返ってくる。

En2ch は、そこで server から差分(B で書き込んだ分)を取ってくる

A#onActivityResult() ここで server から差分取得
  ↓
A#onRestart()
  ↓
A#onResume()

 

ところが、B の状態のまま、他のアプリとかを起動してメモリを大量に使うと、
A が勝手に殺されてしまう。
B の結果を待ってるはずなのに A だけが殺されてしまう。

そうなると、B を終了したときに、既に A は殺されてるので、
まず、A  を作る必要があって、A の最初の onCreate() から始まるのでした。
当然のことながら、最初の onCreate()  では server からデータを取得しようと
するのだが、(殺されたので B の結果を待ってることも知らない)
その直後に、B から onActivityResult() に結果が来て、
「書き込み成功したから差分取得しろ」と来るので、

A#onCreate() ここで server から取得
  ↓
A#onActivityResult() ここで server から書き込んだ分を取得
  ↓
A#onResume()

と動いてしまい、書き込んだデータを2重で server から取得してしまうのでした。

結果を待つように起動してるんだから、OS が殺すとしたら両方殺すだろ、
と思い込んでいたのが甘かったのでした。。。
というか、そうあるべきだと思うのだが、、、
Windows Mobile なら、親が殺されたら、子も殺されるぞ。
onLowMemory() でハンドリングできるようになってる訳だし、
ほんとに足らなかったら両方殺してくれよ。。。

結果を待ってるとしても、親子じゃなく、同レベルの友達って感じなんだね。。。

(←フリーソフトを作るモチベーションアップのために、ぜひ。)

|

« タイミングが | トップページ | ADP1 で ad-hoc 接続成功! »

Android」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/20208/46184952

この記事へのトラックバック一覧です: En2ch の2重書き込みに見える問題:

« タイミングが | トップページ | ADP1 で ad-hoc 接続成功! »