0

受話器にSMSを継続的に受信するシナリオがあります。これで、これらのSMSを読み取り、データをWebサービスにアップロードしました。データをアップロードした後、保存されているかどうかを確認するために、同じデータを再度アップロードする必要があります。

今、私はこのようなコードを書きました..
1)ブロードキャストレシーバーはSMSをDBに保存します(同じUIを更新します)
2)DBを読み取り、アップロードして確認するためのサービス。(インテントサービスを使用して、同じUIを更新します)。

およびSMSを送信するための他のサービスセット
1)サーバー上のデータをチェックし、それに基づいてSMSを送信するためのIntentservice。
2)SMSが保存されている電話番号のステータスを更新します(サーバーで更新します)。

今私の問題それ..私が毎秒SMS受信の数を増やすと、私のアプリケーションはlogcatでエラーではないANRを示して狂ってしまいます、時々DBが開いていないと言います。だから誰かが同じことをするための素晴らしいデザインモデルを提案できますか

注:すべてのコードの準備ができているので、コードを見たい場合はお知らせください

4

1 に答える 1

1

同じデータを2回アップロードする理由がわかりません。HTTPでアップロードするとおっしゃいました(POSTだと思います)。次に、サーバーはブロックし、データを保存して、OK成功した場合やKO失敗した場合のように文字列を返します。

ANRは、メインスレッドがブロックするときに発生します。デフォルトでは、ServicesとBroadcastReceiversの両方がこのスレッドで実行されます。公式のAndroidドキュメントをご覧ください。

全体的なデザインとして、着信SMSの数が非常に多い場合は、5分程度ごとに一括アップロードすることをお勧めします。すべてのメッセージをキューに入れ、5分ごとにサービスがキューを読み取り、その内容をアップロードします。このようにして、多くのオーバーヘッド(CPU、メモリ、帯域幅、時間)を節約できます。おそらく、データフィードの比率に追いつくことができます。

SMSはTCP通信よりもはるかに軽量であるため、デバイスが実際にSMSを継続的に受信すると、書き込み速度が読み取り速度に追いつかず、最終的にCPUが不足し、システム。

于 2012-09-25T08:55:56.753 に答える