デジモノ狂想曲!

デジタルデバイスの活用方法を模索しています。
最近、OpenSocialを勉強中です!
[相互リンク募集中です!!]
コメント、リンク大歓迎!!
.

2009年07月04日

[android]半殺しアクティビティの件 その2


前回の記事で、終わらせたアクティビティがまだ生きていて、タイマー処理などが動き続けているようなことを書きました。

が、とりあえず、タイマーやロケーションリスナーを終わらせることが出来たみたいです。

 

何故前回のコードがダメだったのか考えてみると・・・
おそらく、Timer::cancel()しか呼んでなくて、Timer::purge()を呼んでいなかったから、だと思います。

それぞれの説明には、下記のようにあります。

void  cancel() - Cancels the Timer and removes any scheduled tasks.
int  purge()  - Removes all canceled tasks from the task queue.

canceled task と scheduled task がどのような関係かわかりませんが、
cancel()でTimerをcancelして、putrge()でcanceled taskをremoveする・・・と考えればこの流れでいけるはず。

 

そのほかにも、消し忘れたリスナがいたので、まとめて消すことにしたら、
今度はうまくいった。

アクティビティ終わらせたら、ファイルへの記録も終わるようになりました。
2回目に起動したアクティビティとダブってファイル記録するということも無くなりました。

・・・たぶん、これでOKなはず。

 

今回修正したコードはこちら:

 public class GetSensorValues extends Activity
  implements LocationListener{
  Button  mFinishButton;
  //位置情報を取得するためのマネージャ
  LocationManager mLocationManager;
  Timer timer = null;
  SensorManager sm = null;
  //省略

     public void onClick(View v)
     {
      if(v.getId() == R.id.finish_button){
       //タイマとリスナは強制終了。
             timer.cancel();
             timer.purge();
            
             sm.unregisterListener(mSensorListener);
          mLocationManager.removeUpdates(this);
      finish();
      }
     }
    
     public void onStop(Bundle savedInstanceState){
      //タイマとリスナは強制終了。
         timer.cancel();
         timer.purge();
        
         sm.unregisterListener(mSensorListener);
      mLocationManager.removeUpdates(this);
     }






投稿: はせこう。 at 13:58 | Comment(0) | TrackBack(0) | Android
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/30287441

この記事へのトラックバック

ランキング投票!

RSS取得