私は、インターネットに接続してリアルタイムで緯度と経度の座標で逆ジオコードを実行する Android アプリを持っています。これにより UI が遅延し、「応答していません - 強制終了/待機」エラーが発生する可能性があります (async/threads-handlers を使用しなくても予想どおり!)
非常にうまく機能する非同期タスクを実装しましたが (UI の遅延はもうありません!)、onLocationChanged メソッド内で設定された変数 (緯度と経度に設定されます) にはアクセスできません。私がこれを行っているクラスは、変数を渡し、逆ジオコーディングされたアドレスを含む人にSMSを送信できる別の別のクラスにリンクされています。しかし、doinbackground メソッドを使用して非同期タスクを実装してから、必要なものを送信できなくなりました。もっとうまく説明できるかどうかわからないので、サンプルコードを提供します。
public void onLocationChanged(Location loc){
mylat = loc.getLatitude();
mylong = loc.getLongitude();
}
/*
afaik, this is the code that does the internet stuff, that lags the
UI. If I put this in doinbackground, it cannot access mylat & my long,
and the "loc.getLatitude" has to be done in the "onLocationChanged"
method, which HAS to exist. If I leave the ListAddress code outside the
doinbackground, everything works, BUT the UI will obviously lag.
*/
List<Address> addresses = geoCoder.getFromLocation(mylat,mylong, 1);
mylat = loc.getLatitude(); & mylat = loc.getLatitude();
doinbackground メソッド内に入る最善の方法をアドバイスできる人はいますか?