SDKサイトには十分に文書化されていないものがたくさんあると思いますが、これはその1つです。私がするつもりの主張は、アプリケーションコンテキストを使用するようにデフォルト設定し、本当に必要な場合にのみアクティビティコンテキストを使用するほうがよいように見えることです。アクティビティコンテキストが必要であると私が見た唯一の場所は、進行状況ダイアログ用です。SBERG412は、トーストメッセージにはアクティビティコンテキストを使用する必要があると主張していますが、Androidドキュメントには、使用されているアプリケーションコンテキストが明確に示されています。このGoogleの例のため、トーストには常にアプリケーションコンテキストを使用しました。そうするのが間違っている場合、Googleはここにボールを落としました。
考えて確認するべきことは次のとおりです。
トーストメッセージの場合、Google Dev Guideはアプリケーションコンテキストを使用し、それを使用することを明示的に言います:
トースト通知
開発ガイドのダイアログセクションでは、AlertDialog.Builderがアプリケーションコンテキストを使用し、進行状況バーがアクティビティコンテキストを使用していることがわかります。これはGoogleでは説明されていません。
ダイアログ
アプリケーションコンテキストを使用するのは、向きの変更などの構成変更を処理したい場合や、ビューなどのコンテキストが必要なオブジェクトを保持したい場合に適しています。ここを見ると:実行時間の変更
リークを作成する可能性があるアクティビティコンテキストの使用に関する注意があります。これは、保持されるビューを持つアプリケーションコンテキストで回避できます(少なくともそれは私の理解です)。私が書いているアプリでは、方向の変更に関するいくつかのビューやその他のものを保持しようとしているため、アプリケーションコンテキストを使用するつもりです。したがって、メモリリークを引き起こさないようにアプリコンテキストを使用する必要があります(メモリリークの回避を参照))。私には、アクティビティコンテキストの代わりにアプリケーションコンテキストを使用するのに十分な理由があるように思われ、アクティビティコンテキストよりも頻繁に使用するように思えます。これは、私がこれまでに経験した多くのAndroidの本のようで、Googleの例の多くがそうしています。
Googleのドキュメントでは、ほとんどの場合、アプリケーションコンテキストの使用が完全に問題ないように見えますが、実際には、例(少なくとも私が見た例)でアクティビティコンテキストを使用するよりも頻繁に表示されます。アプリケーションコンテキストを使用することが本当にそのような問題である場合、Googleはこれをさらに強調する必要があります。彼らはそれを明確にする必要があり、彼らは彼らの例のいくつかをやり直す必要があります。権限(Google)がアプリケーションコンテキストを使用することは問題ではないように見えるので、私はこれを未経験の開発者に完全に非難することはしません。