Last active
April 23, 2021 11:20
-
-
Save Pooh3Mobi/530db4d78fca7e6091a380ce102b977f to your computer and use it in GitHub Desktop.
LifeCycleObserveableLogger
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.util.Log | |
import androidx.lifecycle.Lifecycle | |
import androidx.lifecycle.LifecycleObserver | |
import androidx.lifecycle.OnLifecycleEvent | |
object IndentProvider { | |
private var depth = 0 | |
private const val SPACE = " " | |
fun getAndIncrement(): String { | |
require(depth >= 0) | |
val indentSpace = (0 until depth).joinToString(separator = "") { SPACE } | |
depth++ | |
return indentSpace | |
} | |
fun incrementAndGet(): String { | |
require(depth >= 0) | |
depth++ | |
return (0 until depth).joinToString(separator = "") { SPACE } | |
} | |
fun getAndDecrement(): String { | |
require(depth >= 0) | |
val indentSpace = (0 until depth).joinToString(separator = "") { SPACE } | |
depth-- | |
check(depth >= 0) | |
return indentSpace | |
} | |
fun decrementAndGet(): String { | |
require(depth >= 0) | |
depth-- | |
check(depth >= 0) | |
return (0 until depth).joinToString(separator = "") { SPACE } | |
} | |
fun current(): String { | |
require(depth >= 0) | |
return (0 until depth).joinToString(separator = "") { SPACE } | |
} | |
} | |
class IndentLogger(tag: String) { | |
private val prefix: String = run { | |
val tagSize = tag.length | |
(0 until 13).map { if (it < tagSize) tag[it] else " " }.joinToString(separator = "") | |
} | |
fun logAndIncrement(tag: String, msg: String) { | |
Log.d(tag, "${IndentProvider.getAndIncrement()}[$prefix]-$msg") | |
} | |
fun decrementAndLog(tag: String, msg: String) { | |
Log.d(tag, "${IndentProvider.decrementAndGet()}[$prefix]-$msg") | |
} | |
fun log(tag: String, msg: String) { | |
Log.d(tag, "${IndentProvider.current()}[$prefix]-$msg") | |
} | |
} | |
class LifeCycleObservableLogger(val logger: IndentLogger) : LifecycleObserver { | |
companion object { | |
const val TAG = "LifeCycleLog" | |
} | |
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE) | |
fun onCreated() = logger.logAndIncrement(TAG, "ON_CREATE") | |
@OnLifecycleEvent(Lifecycle.Event.ON_START) | |
fun onStarted() = logger.logAndIncrement(TAG, "ON_START") | |
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME) | |
fun onResumed() = logger.logAndIncrement(TAG, "ON_RESUME") | |
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) | |
fun onPaused() = logger.decrementAndLog(TAG, "ON_PAUSE") | |
@OnLifecycleEvent(Lifecycle.Event.ON_STOP) | |
fun onStopped() = logger.decrementAndLog(TAG, "ON_STOP") | |
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) | |
fun onDestroyed() = logger.decrementAndLog(TAG, "ON_DESTROY") | |
fun onSaveInstanceState() = logger.log(TAG, "ON_SAVE_INSTANCE_STATE") | |
fun onRestoreSavedInstanceState() = logger.log(TAG, "ON_RESTORE_SAVED_INSTANCE_STATE") | |
fun onConfigurationChanged() = logger.log(TAG, "ON_CONFIGURATION_CHANGED") | |
fun onCreateView() = logger.log(TAG, "ON_CREATE_VIEW") | |
fun onViewCreated() = logger.log(TAG, "ON_VIEW_CREATED") | |
fun onDestroyView() = logger.log(TAG, "ON_DESTROY_VIEW") | |
fun onViewStateRestored() = logger.log(TAG, "ON_VIEW_STATE_RESTORED") | |
} |
- No configChanges options.
launch
D/LifeCycleLog: [FirstFragment]-ON_CREATE
D/LifeCycleLog: [MainActivity ]-ON_CREATE
D/LifeCycleLog: [FirstFragment]-ON_CREATE_VIEW
D/LifeCycleLog: [FirstFragment]-ON_VIEW_CREATED
D/LifeCycleLog: [FirstFragment]-ON_VIEW_STATE_RESTORED
D/LifeCycleLog: [FirstFragment]-ON_START
D/LifeCycleLog: [MainActivity ]-ON_START
D/LifeCycleLog: [FirstFragment]-ON_RESUME
D/LifeCycleLog: [MainActivity ]-ON_RESUME
launch other app and back.
D/LifeCycleLog: [MainActivity ]-ON_PAUSE
D/LifeCycleLog: [FirstFragment]-ON_PAUSE
D/LifeCycleLog: [MainActivity ]-ON_STOP
D/LifeCycleLog: [FirstFragment]-ON_STOP
D/LifeCycleLog: [FirstFragment]-ON_SAVE_INSTANCE_STATE
D/LifeCycleLog: [MainActivity ]-ON_SAVE_INSTANCE_STATE
D/LifeCycleLog: [FirstFragment]-ON_START
D/LifeCycleLog: [MainActivity ]-ON_START
D/LifeCycleLog: [FirstFragment]-ON_RESUME
D/LifeCycleLog: [MainActivity ]-ON_RESUME
launch other app and back. (don't keep activity)
D/LifeCycleLog: [MainActivity ]-ON_PAUSE
D/LifeCycleLog: [FirstFragment]-ON_PAUSE
D/LifeCycleLog: [MainActivity ]-ON_STOP
D/LifeCycleLog: [FirstFragment]-ON_STOP
D/LifeCycleLog: [FirstFragment]-ON_SAVE_INSTANCE_STATE
D/LifeCycleLog: [MainActivity ]-ON_SAVE_INSTANCE_STATE
D/LifeCycleLog: [MainActivity ]-ON_DESTROY
D/LifeCycleLog: [FirstFragment]-ON_DESTROY_VIEW
D/LifeCycleLog: [FirstFragment]-ON_DESTROY
D/LifeCycleLog: [FirstFragment]-ON_CREATE
D/LifeCycleLog: [MainActivity ]-ON_CREATE
D/LifeCycleLog: [FirstFragment]-ON_CREATE_VIEW
D/LifeCycleLog: [FirstFragment]-ON_VIEW_CREATED
D/LifeCycleLog: [FirstFragment]-ON_VIEW_STATE_RESTORED
D/LifeCycleLog: [FirstFragment]-ON_START
D/LifeCycleLog: [MainActivity ]-ON_START
D/LifeCycleLog: [MainActivity ]-ON_RESTORE_SAVED_INSTANCE_STATE
D/LifeCycleLog: [FirstFragment]-ON_RESUME
D/LifeCycleLog: [MainActivity ]-ON_RESUME
rotate
same recreation log with don't keep activity.
D/LifeCycleLog: [MainActivity ]-ON_PAUSE
D/LifeCycleLog: [FirstFragment]-ON_PAUSE
D/LifeCycleLog: [MainActivity ]-ON_STOP
D/LifeCycleLog: [FirstFragment]-ON_STOP
D/LifeCycleLog: [FirstFragment]-ON_SAVE_INSTANCE_STATE
D/LifeCycleLog: [MainActivity ]-ON_SAVE_INSTANCE_STATE
D/LifeCycleLog: [MainActivity ]-ON_DESTROY
D/LifeCycleLog: [FirstFragment]-ON_DESTROY_VIEW
D/LifeCycleLog: [FirstFragment]-ON_DESTROY
D/LifeCycleLog: [FirstFragment]-ON_CREATE
D/LifeCycleLog: [MainActivity ]-ON_CREATE
D/LifeCycleLog: [FirstFragment]-ON_CREATE_VIEW
D/LifeCycleLog: [FirstFragment]-ON_VIEW_CREATED
D/LifeCycleLog: [FirstFragment]-ON_VIEW_STATE_RESTORED
D/LifeCycleLog: [FirstFragment]-ON_START
D/LifeCycleLog: [MainActivity ]-ON_START
D/LifeCycleLog: [MainActivity ]-ON_RESTORE_SAVED_INSTANCE_STATE
D/LifeCycleLog: [FirstFragment]-ON_RESUME
D/LifeCycleLog: [MainActivity ]-ON_RESUME
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
License