- ベストアンサー
iアプリのTimerListenerイベントはマルチスレッドで動きますか?
iアプリを作っているのいるのですが、Timerを使った処理をやっております。聞きたいことは、TimerListener の timerExpired() と processEvent() は一つ一つ発生するのか、それともマルチスレッドのように同時に発生する可能性があるのかということです。もしマルチスレッドのような動作をするのなら、同じ変数の書き換えが起こるところは競合しないような配慮が必要だと思うのですが、一つ一つ起こるのなら、その必要はありません。 機種はFOMAの903です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「マルチスレッドのように同時に発生する可能性がある」と考えられます。 下記のページにiアプリとマルチスレッドの親切な解説と簡単なサンプルが載せてあります。TimerListenerの timerExpired()も使われています。 「一つ一つ起こる順には起きない」と言うことは書かれていませんが、それは次のようにしてチェックできると思います。 -------------------------------------------------------------------------------- ・ タイマー応答内を無限ループさせる。 69: //タイマー応答 70: public void timerExpired(Timer source){ 71: repaint();//再描画の実施 72: } ・ もし「順にしか起こらない」としたら、この場合ソフトキーで終了できなくなるはずです。 -------------------------------------------------------------------------------- 逆のチェックも同じ方法で出来るでしょう。
お礼
ご回答ありがとうございました。 processEvent();で実行していたときには何の問題も発生していなかったのが、時間が来たらtimerExpired()で実行するようにしてから時々予期しない動作が起こるようになったのですが、いろいろ調べて synchronized を使うようにしたら問題はなくなりました。ありがとうございました。