グリーティング、Android:Timer in Background Service
私は10秒ごとに自分のサーバーにGPS座標を送信するタイマーを実装しようとしています。ここで
は私が実装してるサービスからコードスニペットです:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Timer timer=new Timer();
TimerTask tt=new TimerTask(){
@Override
public void run() {
Location loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
sendCoords(String.valueOf(loc.getLatitude()), String.valueOf(loc.getLongitude()));
Toast.LENGTH_SHORT).show();
Log.i("EOH",String.valueOf(loc.getLatitude()));
}
};
timer.schedule(tt,0,10000);
return START_STICKY;
}
さて問題は、実行内部の何かが()私のアプリを閉じ、強制的に引き起こすことがあります。ここ
LogCatダンプである:
12-28 18:44:18.284: ERROR/AndroidRuntime(6537):FATAL EXCEPTION:タイマー0 12-28 18:44:18.284: ERROR/AndroidRuntime(6537): java.lang.RuntimeException: を持っているスレッド内でハンドラを作成していない することはできませんと呼ばれるLooper.prepare()12-28 18:44:18.284: ERROR/AndroidRuntime(6537): android.os.Handler(Handler.java:121) 12-28 18:44:18.284: ERROR/AndroidRuntime(6537): prestocab.driver.Background $ 2(Background.java:83) 12-28 18:44:18.284: ERROR/AndroidRuntime(6537): prestocab.driver.Background。 sendCoords(Background.java:83) 12-28 18:44:18.284: ERROR/AndroidRuntime(6537): prestocab.driver.Background $ 3.run(Background.java:114) 12-28 18:44 :18.284: ERROR/AndroidRuntime(6537):44:18.554: java.util.Timer $ TimerImpl.run(Timer.java:289) 12-28 18時 ERROR /ウィンドウマネージャ(1310):リターン でremoveWindowLocked
誰にでもこれに対する修正を提案できますか?
locationManager onLocationChanged()関数を使用しようとしましたが、間隔を10秒に設定できません。明らかに指定された時間はガイダンスに過ぎず、OSによって最適なものが決定されます。間隔を100秒に設定しても、1秒ごとに位置がわかります。それで私がタイマーを使う理由。
誰かが何か提案できることを願っています。事前に
おかげで、
「lm.requestLocationUpdates(LocationManager.GPS_PROVIDER、5000、1、lr);」というメッセージが表示されます。助けにならない ? 3番目のパラメータは別の場所の更新をトリガする最小距離ですが、2番目のパラメータは更新後の最小時間です。どちらの条件が最初に満たされても、場所の更新が得られます。 – kellogs
@kellogs明らかに、この投稿からhttp://stackoverflow.com/questions/4418018/android-locationmanager-requestlocationupdates-doesnt-respect-paramsパラメータは指標に過ぎず、個々のデバイスごとに最適なものが決まります。 – Eamorr