2017-01-05 2 views
0

私はアンドロイドアプリケーションにアナリティクスを追加しようとしています。そのためには正しい方法を考えていました。私はいくつかのものを研究しましたが、このコミュニティの意見を求めました。基本的には、このアナリティクスに関連する作業をUIThreadで行うことは望ましくないので、私は2つのソリューションを考え出しました。ログアナライザへの正しいスレッディングアプローチ

  1. Analyticsイベントをサーバーに送信するカスタムAsyncTaskを使用します。したがって、UIThreadを妨害することはありません。
  2. シングルトンクラスの一種になる専用のhandlerThreadカスタムクラスにポストされるカスタムRunnableを使用します。したがって、これらのイベントはそれぞれ専用のhandlerThreadにキューイングされ、イベントにループされます。

私の実装では、イベントスレッドの優先度を低く保ちたいと思います。自分のサーバーでこれらのイベントを追跡するように設定しています。誰かが私に2つのうちのどちらが良い選択肢であるか、まったく間違った方向にあると私に示唆することはできますか?

ありがとうございます。

答えて

0

実際にあなたがやっていることを考えているのか分かりません... あなたのサーバーにアプリの使用状況のログを保存してアップロードしようとしている限り、あなたが望むのであればMixPanelのようなあなたのために。

物事をログに記録して自分でサーバーに送信しようとすると、ログは同じスレッドで発生するはずですが、送信はそのログを移動する別のモジュールにする必要がありますいつサーバーに便利です。

ログは、イベントバス(GreenBotのEventBusなど)またはそれを処理する一重項モジュールを使用して、アプリケーションのすべての角とスレッドから送信できます。

これらのイベントを受け取るモジュールは、バックグラウンドで動作するサービスであり、リアルタイムでその情報を必要としない場合は、可能な限りログをパックしてサーバーにアップロードする必要があります。あなたがすぐに得るすべてのログを送信しないでください。

私が助けた希望、そうでない場合は、より詳細に説明してください:)

アップデート:このライブラリはあなたのための送信機序を気にかかりますチェックアウトGoogleのVolleyを、ちょうどAsyncTaskではないことを知っています良い解決策、それは多くの欠陥があり、原則として、異なるスレッド、UIスレッドのいずれかの種類の通信を送信する方が良いでしょう。ServiceまたはIntentService

+0

ありがとうございます。 MixPanelの使用を希望しません。私はすでにすべての関連する処理を行うことができるサーバーを作成しました。イベントはメインスレッドからキャプチャされ、別のスレッドでサーバーに送信します。データを送信するための内部クラスは、イベントを累積し、デバイスがインターネットを使用しているかしきい値に達したときにのみイベントを送信するようにコード化されています。 私の質問は、それらのイベントを送信する理想的な方法であると考えています。どのスレッド技法を使うべきですか? –

+0

ちょうど私の答えを更新した、私はあなたが既に論理を作成したことを理解しているので、私はあなたのために専用のライブラリを使用するよう助言します:) –

関連する問題