最良の解決策は、wireshark のようなものを使用して、アプリのさまざまなネットワーク操作で使用されるデータを測定し、データ消費を手動で追跡することだと思います。これは確かに実行可能です。
私が言うには、TrafficStats のバグは修正されるよりも早く蓄積され、パッチが無視されているため、TrafficStats は維持されておらず、回避する必要があるという印象を受けます。JBQ は彼が辞める前に多くの人を割り当てましたが、彼は単に後片付けをしていたと思います。Android の設定にデータ使用統計が含まれていることを認識しています。私は調査していませんが、それらも信頼できないと推測します (怠け者で申し訳ありませんが、手動で計算を行った場合に無駄な時間が大幅に短縮されたと既に結論付けています)。
以下は、一般的な API を調べているときに遭遇した、trafficstats のバグの一部です (問題の一部は TrafficStats にあり、一部はカーネルに由来します)。私はスレッド/タグ/ソケット ベースの API を試したことがなく、これまでの経験に基づいて試すつもりもありませんが、それらがよりうまく機能するかどうかを知りたいと思っています。
2.x
Android では、TrafficStats.getTotalRxBytes() が予想より少ない
3.x では
、TrafficStats.getMobileRxBytes() および TrafficStats.getMobileTxBytes():
https://code.google.com/p/android/issues/detail?id=19938
API レベル 12 以降であっても、TrafficStats API は UDP トラフィックを報告しません。サポートされているはずです (修正されません):
https://code.google.com/p/android/issues/detail?id=32410
4.3 では、getUid API が完全に壊れていますが、このバグの修正を計画しているようです。とにかく、バグが Google のパートナーに渡った場合、これらの API は当面の間役に立たないと思います。
4.3 では、TrafficStats.getUidRxBytes と getUidTxBytes は常に 0 を返します:
https://code.google.com/p/android/issues/detail?id=58210
そして、この SO 投稿を参照してください。