私の Android アプリケーションを設計するためのアドバイスが必要です。これは私の最初のアプリなので、自分の概念がよくわかりません。
ここで入手可能なソースコード: https://code.google.com/p/android-express-project/source/browse/#svn%2Ftrunk%2Fandroid-express-project
私がしなければならないこと: 最初にユーザーに接続するように要求するアプリを作成します。その後、アプリは配信者 (ユーザーが接続されている) のラウンドを取得して、すべての配信を Google マップ上のウェイポイントとして表示する必要があります。アプリは、すべてのクライアントを配信するための最も高速な方法を表示する必要があります。始点と終点は基本的に同じです。配信者が配信ポイントの近くにいる場合、これを検出して、配信するパケットのスキャナーを表示する別のアクティビティを自動的に呼び出す必要があります。
私がすでに行ったこと: RoboActivity に拡張 する Activity ( NextDelivery ) があります (ビューなどに値をバインドするために @Inject のような注釈を使用する API。通常の Activity クラスと実際には違いはありません)。このアクティビティには、次の 2 つのインターン プライベート クラスがあります。
- LocationSource と LocationListener を実装するFollowMeLocationSource 。ユーザーの位置を検出し、地図にマーカーを追加するのに役立ちます。
- AsyncTaskに拡張する RoundXmlTask 。すべての配信、送信者、受信者、パケットを含む XML ファイルを取得するのに役立ちます。このファイルは非常に重要です。これがないと、配信者がどこに行く必要があるかを知ることができるからです。そのため、ファイルを取得して解析し、データをデータベースに保存する必要があります。(この部分は正しく動作します) しかし、遅いので、ThreadUI をブロックしないように、これを AsynchTask に入れたいと思いました。解析が完了したら、XML からではなく DB からデータを取得しますが、時間もかかりますが、ThreadUI では実行しません。
実際に私の手順は次のとおりです。
- NextDelivery.onCreate を起動する
- followMeLocationSource のインスタンスを取得し、マップを初期化し、asyncTask を実行します。
しかし、それが気に入った場合は、2 つの asyncTask を起動します (なぜなら、followMeLocationSource.onLocationChanged() で、Google Web サービスの方向を呼び出してポイント、オーダーラーを取得し、地図上に道路を描画する RoundTask を起動するためです)。
それは機能しますが、私はもっとうまくやれると思います。(そして、完全に動作せず、Toast がたくさん表示され、最初は階段の道が描かれません)
だから、私はそれをより良くするためのベストプラクティスがどのようにあるかを知っているでしょう. お時間をいただき、ありがとうございました。
PS: SVN からソース コードをダウンロードして、必要に応じてテストできます。プロジェクトに google_play_service_lib を追加する必要があります。それだけです。