私がやろうとしていること:
1)x分ごとにユーザーの位置情報を更新します
2)タイマーとTimerTaskを使用して、最新の位置情報を記録するWebサービスを呼び出します
何が起こっていますか:
1)TimerTaskが作成されます
2)ユーザーの電話が休止状態/スリープ状態の場合、Webサービスへの呼び出しは機能しません
3)TimerTaskがキューに保存されているようです
4)ユーザーの電話がウェイクアップすると、キューに入れられたすべてのTimerTasksがすぐに実行され、Webサービスに対して複数の不要な場所の更新が発生します
コードスニペットは次のとおりです。
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try
{
//validate that the device has an active & working connection
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = connMgr.getActiveNetworkInfo();
//validate the the device network provider is enabled
if ((eview_locationManagerwifi
.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) && (activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED))
{
UpdateSubscriberLocation(); // call the web service to report location data
}
else
{
this.cancel();
}
}
catch (Exception e)
{
}
ネットワーク接続とプロバイダーが有効になっているチェックは、どちらも「true」で返されるようです。TimerTaskはキャンセルされず、ユーザーの電話がウェイクアップするまでキューに入れられるだけです。
Webサービスからの応答なしに一定の時間が経過した場合、どうすればTimerTaskをキャンセルできますか?TimerTaskで一種の「setTimeout」メソッドを見つけることができませんでした。