2

私は、いくつかのスレッドを持つ Android アプリケーションに取り組んでいます。そのうちの 1 つは、GPS レシーバーから 1 秒に 1 回データを取得しています。他のスレッドが GPS スレッドからの情報にアクセスできるようにしてほしい。

私はすでにメッセージキューでそれをやろうとしましたが、コードがかなり面倒になりました.私が作成したすべての新しいスレッドは、独自の方法でメッセージを処理する必要があったため、すべてのスレッドクラスで多くの新しい実装を行う必要がありました.

この方法で簡単にデータを取得できるようにしたいと思います。

ApplicationState.getLocation();

最新のデータを使用できるようにします。どうすればそれを達成できますか?他のスレッドでオンライン画像分析を行っているため、スレッドを長時間ロックしたくないため、同期されたフィールドを持つ静的クラスを作成したくありません。

ここではどのようなアプローチが最適でしょうか?

乾杯、ネブリル

4

2 に答える 2

1

1) アプリケーション クラス「MyApp」を作成します。

1.1) マニフェスト ファイル内:

<application
    android:name=".MyApp"
    ....
/>

1.2) クラスを作成します。

public class MyApp extends Application {
    public void onCreate() {
          super.onCreate();
    }

    private volatile Location mLastLocation = null;
    public Location getLastLocation(){
        return mLastLocation;
    }
    public void setLastLocation(Location mLastLocation){
        this.mLastLocation = mLastLocation;
    }
}

2)同じプロセスでアプリケーション(サービス、アクティビティ)の任意のコンテキストから場所を設定するには(1つのプロセスを持つように注意してください。Androidでは1つのプロセスとマルチスレッドを持つことができます):

((MyApp)context.getApplicationContext()).setLastLocation(location);

3) 同じプロセスでアプリケーションの任意のコンテキストから最新の場所を取得するには:

((MyApp)context.getApplicationContext()).getLastLocation();

注意: パフォーマンスを向上させるためにリスナーを使用することもできます。MyApp リスナーのリストに登録し、onLocationChanged からリスナーをトリガーします

于 2012-12-21T23:31:00.243 に答える