change activity lifecycle events to async callbacks