FrameLayout está diseñado para contener un objeto hijo. Por ejemplo, tener una vista de reciclaje dentro de un FrameLayout pero nada más.
CoordinatorLayout es una versión mejorada de FrameLayout. Se utiliza sobre todo para mejorar el rendimiento del objeto hijo. Por ejemplo, digamos que tenemos un ListView y quiero cambiar el comportamiento de desplazamiento cuando ocurre una interacción con el usuario. Puedo usar CoordinatorLayout en esto para hacer que el ListView se comporte como quiero.
LinearLayout está diseñado para alinear los objetos hijos en una dirección, es decir, horizontal o verticalmente. Por ejemplo, si tengo un TextView, ImageView, y EditText y quiero que estén en una línea, entonces puedo usar LinearLayout con una orientación horizontal para hacer esto.
RelativeLayout es un poco más complejo que los dos anteriores pero tiene mucha más capacidad. RelativeLayout está diseñado para alinear el objeto hijo en relación con la posición del padre o de algún otro objeto hijo. Por ejemplo, hoy en día solemos tener un botón al final de la pantalla en el lado derecho, la forma de hacerlo es crear un RelativeLayout como padre y luego un botón dentro de él con los parámetros alignParentBotton y alignParentRight = True.
ConstraintLayout es una versión actualizada de RelativeLayout es decir, proporciona muchos más parámetros que RelativeLayout y una funcionalidad mejorada.