I'm learning about custom views and wanted to learn about
invalidate() is used specifically for redrawing the content of your view. The redraw does not happen synchronously. Instead, it flags the region of your view as invalid so that it will be redrawn during the next render cycle.
requestLayout() should be used when something within it has possibly changed its dimensions. In this case, the parent view and all other parents up the view hierarchy will need to readjust themselves via a layout pass.
If you are not doing anything to your view that would change its size, then you do not have to call requestLayout.
If you go back and look at the places in the code for TextView where requestLayout is being called, it will be on methods where the view's bounds will be affected. For example, setPadding, setTypeface, setCompoundDrawables, etc.
So, when requestLayout is called, it should be paired with a call to invalidate to ensure that the entire view is redrawn.