正常に処理が行われたことを伝えるメッセージや、エラーが発生したことを伝えるメッセージを表示することは、ユーザーフレンドリーなアプリを提供する上で必要不可欠な行いになります。
Androidアプリでは、このようなメッセージを表示するために、昔から Toast や AlertDialog 、Material Designが生まれてからは追加で Snackbar が提供されています。
しかし、いざメッセージ表示を実装しようとするとToastを使えば良いのか、AlertDialogを使えば良いのか、Snackbarを使えば良いのか、正直よくわかりません。
ToastとSnackbarに関しては Material Desiginのガイドライン で以下のように定義されていますがはっきりしていません。
-
Snackbars contain a single line of text directly related to the operation performed. They may contain a text action, but no icons.
-
Toasts (Android only) are primarily used for system messaging. They also display at the bottom of the screen, but may not be swiped off-screen.
そこで今回は私が勝手に解釈したメッセージの表示ルールをみなさんに提案したいと思います。
Toast
Toastは 必要なパーミッションが許可されていない、通信処理を行いたいのにネットワークに繋がっていない、などのOS側の設定に近いエラーメッセージ を表示する際に最適だと考えています。
Toastはアプリそのものよりも上のレイヤーに表示されますし、Snackbarが登場してからはプライオリティが高いメッセージを表示するものに格上げされたと勝手に解釈しているのでこのように考えました。
また、アプリ内でのクリティカルな位置づけのメッセージを表示する際にも使って良いと思います。

AlertDialog
AlertDialogは ユーザーの操作ミスやサーバーエラーなどの、ユーザーにメッセージをしっかり読んでもらいたいエラーメッセージ を表示する際に最適だと考えています。
SnackbarやToastと違って、ボタンをタップしないとメッセージが閉じないものになっているため、長文を表示させたり重要なメッセージを表示させたりする場合にも有効になってくると考えています。
*SnackbarやToastも長時間表示させることは可能ですが、本来の姿ではないと解釈しています

Snackbar
Snackbarは ユーザーの能動的なアクションによるメッセージ を表示する際に最適だと考えています。
Snackbarはメッセージの右側にアクションボタンが付けられるため、UNDOやRETRYが可能なメッセージを表示したい場合に有効になってくると考えています。
個人的にSnackbarにはポジティブなメッセージだけを表示させたい欲がありますが、必要であればエラーメッセージを表示させても良いと解釈しています。

その他(TextView)
バリデーションエラーや、Toast・AlertDialog・Snackbarを使うほどでもないメッセージに関しては、体験的にActivity/Fragment上に作ったTextViewに表示させるのが最適だと考えています。
まとめ
ユーザーの能動的なアクションによる通知 → Snackbar、
— nissiy(にっしー) (@yoichinishimura) 2017年6月14日
ユーザーにメッセージを読ませたいユーザーの操作ミスや、サーバーエラーによる通知 → AlertDialog、
パーミッションが取れないとか、ネットワークに繋がっていないとかのシステム側に近いエラー → Toast
今回は私が勝手に解釈した内容を提案してみましたが、各々のアプリの世界観やルールにあわせてカスタマイズすることでより良いものになると思いますので、メッセージの表示ルールの策定をしてみてはいかがでしょうか。