2017-10-13 13 views
1

アクティビティの使用時期とアプリケーションのコンテキスト(例:on this SO post)を使用するタイミングについて、いくつかの議論があります。Toast.makeText() - アクティビティまたはアプリケーションのコンテキスト

アクティビティまたはアプリケーションコンテキストを使用することの意味が、Toast.makeText()の方法であることがわかりました。

ドキュメントは簡単にパラメータcontextのために書かれています:

コンテキスト:使用するコンテキスト。通常、アプリケーションまたはアクティビティオブジェクト。トーストの期間は活動のライフサイクルにバインドされているアクティビティのコンテキストを使用している場合

私の質問は

  • をしていますか?
  • メモリリークは深刻な問題ですか?彼らはトーストの期間によって制限されるようです。

これ以外に何が考えられますか?

+1

メモリリークは深刻な問題です。メモリを浪費すると、メモリが足りなくなる危険性があります。 – Zoe

答えて

4

私はちょうどApplicationコンテキストを使用します。あなたのActivityコンテキストを使用すると、Toastが表示を停止するまでアクティビティへの参照が残っている可能性があります。ガベージコレクションが数秒遅くなる可能性があります。

アクティビティコンテキストを使用する場合、トーストの継続時間はアクティビティライフサイクルにバインドされますか?

私はソースコードを見ていませんでしたが、それは逆です:あなたの活動参照は、あなたのトーストが表示されなくなるまで続きます。

メモリリークは深刻な問題ですか?

はい!この場合、アクティビティへの参照は最終的にガベージコレクションされるため、永久にリークすることはありません。数秒間厳密に必要なメモリより多くのメモリを使用するので、ApplicationContextはより安全です。そして、すべての場合において、私はここにApplicationContextを使用することの本当の欠点は見当たりません。

+1

お返事ありがとうございます。アクティビティ・コンテキストを使用する唯一の理由は、トーストの存続期間がアクティビティ・ライフタイムに縛られていた場合でした。それは事実ではないようですから、私は完全に同意します。 –

関連する問題