I divide responsibilites of MainActivity and try keep it clean and readable by extending BaseActivities such as MainActivity extends AdBaseActivity extends LocationBaseActivity extends FullScreenActivity extends Activity.
Each activity only takes care of what they are named to do while keeping MainActivity to set layouts and views and run main object for the task such as GameSurfaceView or main class it supposed to run. Is this bad programming practice regarding to coupling and cohesion, hard to test or from any other design principle aspect?
Is using a class, for example LocationController with all life cycle methods required and instantiated or used with dependency injection, better over extending BaseActivities?
I wonder how to maintain Manager classes with callbacks needed by Activity when a permission is needed and DialogFragment or any other view should be infilated for example, or result from another Activity is returned? These manager classes can be members of other classes and having deeper references to Activity may cause memory leaks and it could be hard to detect if this situation can only occur when a manager class is on a particular state that prevents Activity reference not be released.