2016-09-14 20 views
1

アクティビティAでは、A1とA2の両方から2つのフラグメントが得られ、アクティビティBとアクティビティCにアクセスできます。問題は、アクティビティBとCの両方に位置情報(Lat、lngなど)が必要です。どのように私は通常のUIの描画で巨大な遅延なくこれを達成することができますか?Androidはすべてのアクティビティで位置情報を取得しますか?

私は2失敗した計画を持っている:

  1. 直接、場所を取得するために使用A1とA2に値を渡し、最後にユーザーが屋内にいる場合はBとCに渡し、位置情報、かかります受信する。ロケーション情報なしでユーザーがBとCにアクセスするとどうなりますか?

  2. サービスをご利用ください。しかし、私は長い間、場所の識別を必要としない、さらには、すべての人に放送を送ることができるサービスは、BとCのonCreate()の前にブロードキャストメッセージを受信できますか?また、ブロードキャストには受信に時間がかかるため、初期化に大きく影響する可能性があります。

答えて

1

ねえ、あなたは実際に

  • それにGoogleApiClientを結合させたサービスを作成します。多くのオプションを持っています。このサービスを必要なアクティビティにバインドし、必要なアクティビティにデータを受け取ります。
  • イベントバスを使用します。 GoogleApiClientでクラスを作成して場所を取得し、必要なアクティビティ/フラグメント内のデータをキャッチします
  • Dagger2を使用して、必要なアクティビティ/フラグメントにGoogleApiClient @moduleを挿入します。私はあなたを助けた

希望;)

+0

これは非常に役に立ちます!どうもありがとうございます!私はこれらの3つの選択肢の中で、最も速いものがもう1つ質問されます。私はそれに基づいてUIを描画する必要があるので。 – LunarS

+0

私はサービスでの作業が好きです。イベントは安定していないので、レシーバを持つどのクラスでもデータを取得できるため、必要な場所で受信したことを確認できません。サービスは非常にシンプルです。追加のライブラリがなくても、アプリが隠れていても実行できますので、使用することをお勧めします。助けて欲しい) –

+0

@LunarS https://gist.github.com/bryanl/4337357例を見てください –

0

このイベントバスパターンの実装を検討してください。考慮すべき唯一のことは、UIスレッド・エンフォーサを渡すことです。

http://square.github.io/otto/

+0

それは放送するためにかなり似ていますが、より高速な放送受信機よりもそれですか?放送受信機は、メッセージを受信するのに多くの時間を要することがある。 – LunarS

+0

また、初期化されていないアクティビティは、onCreateの後に投稿されたイベントを受け取ることができますか? – LunarS

+0

ライブラリーはリフレクションを使用してサブスクライブされたメソッドを直接呼び出すため、ブロードキャストはAndroid OSで処理されるため、はるかに高速になるため、遅いと思われます。新しく加入したコンポーネントに通知するための特別な@Provideアノテーションがあります。 –

関連する問題