Start here. This is the direct spoken answer to practice first.
Overview
Lifecycle hooks describe timing; they should not become a substitute for clear state ownership.
I choose a lifecycle boundary based on what the work depends on. Input-derived state is usually computed directly; initialization that requires supplied inputs can happen after those inputs exist, and DOM measurement waits until rendering has completed. Cleanup belongs with the resource that was created, using Angular's destruction facilities rather than relying on a forgotten manual convention.