diff --git a/app/src/main/java/luyao/util/ktx/ui/LifeCycleActivity.kt b/app/src/main/java/luyao/util/ktx/ui/LifeCycleActivity.kt
index 33d6312..5ad5f73 100644
--- a/app/src/main/java/luyao/util/ktx/ui/LifeCycleActivity.kt
+++ b/app/src/main/java/luyao/util/ktx/ui/LifeCycleActivity.kt
@@ -1,10 +1,14 @@
package luyao.util.ktx.ui
import android.os.Handler
+import kotlinx.android.synthetic.main.activity_lifecycle.*
import luyao.ktx.R
+import luyao.util.ktx.MainActivity
import luyao.util.ktx.base.BaseActivity
import luyao.util.ktx.ext.loge
+import luyao.util.ktx.ext.toast
import luyao.util.ktx.lifecycle.KtxHandler
+import luyao.util.ktx.lifecycle.KtxManager
/**
* Created by luyao
@@ -19,6 +23,9 @@ class LifeCycleActivity : BaseActivity() {
}
override fun initData() {
+ currentActivityBt.setOnClickListener { KtxManager.currentActivity?.let { toast(it.localClassName) } }
+ finishMainBt.setOnClickListener { KtxManager.finishActivity(MainActivity::class.java) }
+ finishAllBt.setOnClickListener { KtxManager.finishAllActivity() }
}
private val myHandler = KtxHandler(this, Handler.Callback {
diff --git a/app/src/main/res/layout/activity_lifecycle.xml b/app/src/main/res/layout/activity_lifecycle.xml
index fb3d8a2..f1d19ab 100644
--- a/app/src/main/res/layout/activity_lifecycle.xml
+++ b/app/src/main/res/layout/activity_lifecycle.xml
@@ -4,4 +4,19 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ktx/src/main/AndroidManifest.xml b/ktx/src/main/AndroidManifest.xml
index 593f50b..63391fb 100644
--- a/ktx/src/main/AndroidManifest.xml
+++ b/ktx/src/main/AndroidManifest.xml
@@ -2,9 +2,8 @@
package="luyao.util.ktx">
-
-
-
+
+
-
+
+
+
diff --git a/ktx/src/main/java/luyao/util/ktx/Ktx.kt b/ktx/src/main/java/luyao/util/ktx/Ktx.kt
new file mode 100644
index 0000000..37b9336
--- /dev/null
+++ b/ktx/src/main/java/luyao/util/ktx/Ktx.kt
@@ -0,0 +1,53 @@
+package luyao.util.ktx
+
+import android.app.Application
+import android.content.ContentProvider
+import android.content.ContentValues
+import android.database.Cursor
+import android.net.Uri
+import androidx.lifecycle.ProcessLifecycleOwner
+import luyao.util.ktx.lifecycle.KtxLifeCycleCallBack
+import luyao.util.ktx.lifecycle.KtxLifeObserver
+
+/**
+ * Created by luyao
+ * on 2019/8/6 14:22
+ */
+class Ktx : ContentProvider() {
+
+ companion object {
+ lateinit var app: Application
+ var watchActivityLife = true
+ var watchAppLife = true
+ }
+
+
+ override fun onCreate(): Boolean {
+ val application = context!!.applicationContext as Application
+ install(application)
+ return true
+ }
+
+ private fun install(application: Application) {
+ app = application
+ if (watchActivityLife) application.registerActivityLifecycleCallbacks(KtxLifeCycleCallBack())
+ if (watchAppLife) ProcessLifecycleOwner.get().lifecycle.addObserver(KtxLifeObserver())
+ }
+
+ override fun insert(uri: Uri, values: ContentValues?): Uri? = null
+
+ override fun query(
+ uri: Uri,
+ projection: Array?,
+ selection: String?,
+ selectionArgs: Array?,
+ sortOrder: String?
+ ): Cursor? = null
+
+
+ override fun update(uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array?): Int = 0
+
+ override fun delete(uri: Uri, selection: String?, selectionArgs: Array?): Int = 0
+
+ override fun getType(uri: Uri): String? = null
+}
\ No newline at end of file
diff --git a/ktx/src/main/java/luyao/util/ktx/lifecycle/KtxHandler.kt b/ktx/src/main/java/luyao/util/ktx/lifecycle/KtxHandler.kt
index fb1e243..98901f2 100644
--- a/ktx/src/main/java/luyao/util/ktx/lifecycle/KtxHandler.kt
+++ b/ktx/src/main/java/luyao/util/ktx/lifecycle/KtxHandler.kt
@@ -1,7 +1,6 @@
package luyao.util.ktx.lifecycle
import android.os.Handler
-import android.os.Message
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.LifecycleOwner
@@ -11,7 +10,7 @@ import androidx.lifecycle.OnLifecycleEvent
* Created by luyao
* on 2019/8/6 9:34
*/
-class KtxHandler(lifecycleOwner: LifecycleOwner,callback: Callback) : Handler(callback), LifecycleObserver {
+class KtxHandler(lifecycleOwner: LifecycleOwner, callback: Callback) : Handler(callback), LifecycleObserver {
private val mLifecycleOwner: LifecycleOwner = lifecycleOwner
diff --git a/ktx/src/main/java/luyao/util/ktx/lifecycle/KtxLifeCycleCallBack.kt b/ktx/src/main/java/luyao/util/ktx/lifecycle/KtxLifeCycleCallBack.kt
new file mode 100644
index 0000000..ca6301e
--- /dev/null
+++ b/ktx/src/main/java/luyao/util/ktx/lifecycle/KtxLifeCycleCallBack.kt
@@ -0,0 +1,46 @@
+package luyao.util.ktx.lifecycle
+
+import android.app.Activity
+import android.app.Application
+import android.os.Bundle
+import luyao.util.ktx.ext.loge
+
+/**
+ * Created by luyao
+ * on 2019/8/6 10:45
+ */
+class KtxLifeCycleCallBack : Application.ActivityLifecycleCallbacks {
+
+
+ override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
+ KtxManager.pushActivity(activity)
+ "onActivityCreated : ${activity.localClassName}".loge()
+ }
+
+ override fun onActivityStarted(activity: Activity) {
+ "onActivityStarted : ${activity.localClassName}".loge()
+ }
+
+ override fun onActivityResumed(activity: Activity) {
+ "onActivityResumed : ${activity.localClassName}".loge()
+ }
+
+ override fun onActivityPaused(activity: Activity) {
+ "onActivityPaused : ${activity.localClassName}".loge()
+ }
+
+
+ override fun onActivityDestroyed(activity: Activity) {
+ "onActivityDestroyed : ${activity.localClassName}".loge()
+ KtxManager.popActivity(activity)
+ }
+
+ override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle?) {
+ }
+
+ override fun onActivityStopped(activity: Activity) {
+ "onActivityStopped : ${activity.localClassName}".loge()
+ }
+
+
+}
\ No newline at end of file
diff --git a/ktx/src/main/java/luyao/util/ktx/lifecycle/KtxLifeObserver.kt b/ktx/src/main/java/luyao/util/ktx/lifecycle/KtxLifeObserver.kt
new file mode 100644
index 0000000..406ff39
--- /dev/null
+++ b/ktx/src/main/java/luyao/util/ktx/lifecycle/KtxLifeObserver.kt
@@ -0,0 +1,24 @@
+package luyao.util.ktx.lifecycle
+
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleObserver
+import androidx.lifecycle.OnLifecycleEvent
+import luyao.util.ktx.Ktx
+import luyao.util.ktx.ext.toast
+
+/**
+ * Created by luyao
+ * on 2019/8/6 15:10
+ */
+class KtxLifeObserver : LifecycleObserver {
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_START)
+ fun onForeground() {
+ Ktx.app.toast("应用进入前台")
+ }
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
+ fun onBackground() {
+ Ktx.app.toast("应用进入后台")
+ }
+}
\ No newline at end of file
diff --git a/ktx/src/main/java/luyao/util/ktx/lifecycle/KtxManager.kt b/ktx/src/main/java/luyao/util/ktx/lifecycle/KtxManager.kt
new file mode 100644
index 0000000..d75b9c4
--- /dev/null
+++ b/ktx/src/main/java/luyao/util/ktx/lifecycle/KtxManager.kt
@@ -0,0 +1,55 @@
+package luyao.util.ktx.lifecycle
+
+import android.app.Activity
+import java.util.*
+import java.lang.Class
+
+/**
+ * Created by luyao
+ * on 2019/8/6 10:58
+ */
+object KtxManager {
+
+ private val mActivityList = LinkedList()
+
+ val currentActivity: Activity?
+ get() =
+ if (mActivityList.isEmpty()) null
+ else mActivityList.last
+
+
+ fun pushActivity(activity: Activity) {
+ if (mActivityList.contains(activity)) {
+ if (mActivityList.last != activity) {
+ mActivityList.remove(activity)
+ mActivityList.add(activity)
+ }
+ } else {
+ mActivityList.add(activity)
+ }
+ }
+
+ fun popActivity(activity: Activity) {
+ mActivityList.remove(activity)
+ }
+
+ fun finishCurrentActivity() {
+ currentActivity?.finish()
+ }
+
+ fun finishActivity(activity: Activity) {
+ mActivityList.remove(activity)
+ activity.finish()
+ }
+
+ fun finishActivity(clazz: Class<*>){
+ for (activity in mActivityList)
+ if (activity.javaClass == clazz)
+ activity.finish()
+ }
+
+ fun finishAllActivity() {
+ for (activity in mActivityList)
+ activity.finish()
+ }
+}
\ No newline at end of file