web-dev-qa-db-ja.com

Android:AsyncTaskの推奨事項:プライベートクラスまたはパブリッククラス?

私は現在、いくつかのAndroidアプリをチームで開発しており、過去数か月間に2つの異なるアプローチを使用しました(1つは個人的に好み、もう1つは他の開発者が好みます)。

これまでのところ結果は同じですが、これは私に疑問を抱かせました...

  • asyncTasksを、それらを使用するアクティビティ内のプライベートクラスとして使用します。
  • または、アクティビティのコンテキストを受け取る個別のパブリッククラスとしてAsyncTasksを使用します

Googleが推奨するアプローチはありますか?

あなたの経験はこれについて何と言っていますか(長所、短所、問題)?

43
neteinstein

内部クラスは、プライベートであるか、または囲んでいるクラスに何らかの形で密接に関連付けられているオブジェクトを表すのに適しています。場合によっては、内部クラスを使用する技術的な理由があります(たとえば、クロージャのシミュレーション)。また、名前空間の汚染を削減します。

内部クラスの欠点の1つは、それらが包含クラスのプライベートメンバー(フィールドまたは関数)にアクセスする場合、コンパイラーがそれらのメンバーへのアクセサー関数を生成することです。言語の純粋主義者は、このカプセル化の破れが良いことなのか悪いことなのかを議論するでしょう。アクセス関数は、各アクセスに少しのオーバーヘッドを追加します(通常、これは要因ではありませんが、要因はあります)。もう1つの欠点は、ソースファイルがより複雑になり、管理が難しくなることです。 (私は時々、外部クラスにあると思って内部クラスの関数を編集することに悩まされました。逆もまた同様です。)最後に、内部クラスは再利用できない傾向がありますが、個別のクラスは複数の用途を持つようにパラメーター化できることがよくあります。 。

これらの長所と短所は私の頭のてっぺんから外れています。私は他の人が追加の考えを持っていると確信しています。

更新:

このGoogleではIO video 内側のAsyncTaskオプションは明らかに間違ったオプションとしてマークされています。

36
Ted Hopp

それは問題ではありません、あなたのコードにとって最も意味のあるものを使用してください。重要なことは、アクティビティが破棄された後、アクティビティの内部クラスとして暗黙的に、またはアクティビティ/コンテキストオブジェクトを指定することによって明示的に、アクティビティの参照を保持している非同期タスクを監視することです。

7
hackbod