Library to easily log out Android lifecycle methods for Activities and Fragments.

Download Android Arsenal
Android CI


Gradle - add the following line to your build.gradle

implementation 'com.chesire:lifecyklelog:{version}'

Usage example

Initialize in your application class.

class ApplicationOverride : Application() {
    override fun onCreate() {

Add the @LogLifecykle annotation to the Activity or Fragment that the lifecycle methods should be logged for.

class MainActivity : AppCompatActivity() { ...

class MainFragment : Fragment() { ...

Then lifecycle events will be logged out in logcat.

D/Lifecykle: MainActivity ⇀ onStart
D/Lifecykle: MainFragment ⇀ onAttach
D/Lifecykle: MainFragment ⇀ onCreate
D/Lifecykle: MainFragment ⇀ onCreateView
D/Lifecykle: MainFragment ⇀ onActivityCreated
D/Lifecykle: MainFragment ⇀ onStart
D/Lifecykle: MainActivity ⇀ onResume
D/Lifecykle: MainFragment ⇀ onResume
D/Lifecykle: MainActivity ⇀ onPause
D/Lifecykle: MainFragment ⇀ onPause
D/Lifecykle: MainActivity ⇀ onStop
D/Lifecykle: MainFragment ⇀ onStop


Logging mechanism

By default LogLifecykle will output to Log.d with a tag of Lifecykle, to override this behaviour pass an implementation into the LifecykleLog.logHandler.

LifecykleLog.logHandler = LogHandler { clazz, lifecycleEvent, bundle ->
    Log.e(clazz, lifecycleEvent) 

This can allow you to use other logging frameworks such as Timber.

LifecykleLog.logHandler = LogHandler { clazz, lifecycleEvent, bundle ->
    Timber.i("$clazz -> $lifecycleEvent - $bundle")

For lifecycle methods which pass a bundle along, it will automatically be pushed through the LogHandler. In instances where there is no bundle, or it is empty, then the value will simply be "null".

Lifecycle methods

To customise which lifecycle methods are logged out, an array of the LifecycleEvent enum can be passed into LifecykleLog.logEvents, this can also be done with the @LogLifecykle annotation.

LifecykleLog.logEvents = arrayOf(

@LogLifecykle(overrideLogEvents = [LifecycleEvent.ON_START])
class MainActivity : AppCompatActivity() {

@LogLifecykle(overrideLogEvents = [LifecycleEvent.ON_ACTIVITY_CREATED, LifecycleEvent.ON_ATTACH])
class MainFragment : Fragment() {

If logEvents is provided to the LifecykleLog then it will override the defaults.
If overrideLogEvents is provided on the annotation, only the methods that are provided in this will be logged out.

READ:  Android Custom RecyclerView with Images and Text Search/Filter

Class name

To customise the class name that is logged out, a new name can be provided to the annotation.

@LogLifecykle(className = "MainActivity")
class MainActivity : AppCompatActivity() {

@LogLifecykle(className = "MaybeMainFragment")
class MainFragment : Fragment() {

This can be useful if ProGuard strips out the class names and you really need to see them in the logs. By default the name will be pulled from the objects

Remove Annotation

If you want to perform logging of ALL Activities and Fragments, without needing to add the annotation to them, then the configuration option requireAnnotation can be set to false.

LifecykleLog.requireAnnotation = false

This will ignore any annotations that are currently set, and perform logging for every Activity and Fragment on the lifecycle events defined in LifecykleLog.logEvents.

For more examples and usage, please refer to the sample.


Please read for details on how to contribute.


Apache 2.0 - See LICENSE for more information.

(a). MainActivity Here is an example usage of this library:

import android.os.Bundle
import com.chesire.lifecyklelog.LogLifecykle

 * [AppCompatActivity] to show how to use [LogLifecykle].
@LogLifecykle(className = "MainActivity")
class MainActivity : AppCompatActivity(R.layout.activity_main) {
    override fun onCreate(savedInstanceState: Bundle?) {

        if (savedInstanceState == null) {
                .replace(, MainFragment.newInstance())

(b). MainFragment

import com.chesire.lifecyklelog.LifecycleEvent
import com.chesire.lifecyklelog.LogLifecykle

 * [Fragment] to show how to use [LogLifecykle].
    overrideLogEvents = [
class MainFragment : Fragment(R.layout.fragment_main) {
    companion object {
         * Generate a new instance of [MainFragment].
        fun newInstance() = MainFragment()


READ:  Creating Android ScratchCard without any Library