parent
9cb5665c61
commit
a8d7d271b0
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -4,4 +4,19 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/currentActivityBt"
|
||||
android:text="currentActivity"
|
||||
style="@style/NormalButton"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/finishMainBt"
|
||||
android:text="finishMainActivity"
|
||||
style="@style/NormalButton"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/finishAllBt"
|
||||
android:text="finishAllActivity"
|
||||
style="@style/NormalButton"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -2,9 +2,8 @@
|
|||
package="luyao.util.ktx">
|
||||
|
||||
|
||||
|
||||
<application >
|
||||
|
||||
<application>
|
||||
|
||||
<provider
|
||||
android:authorities="${applicationId}.fileprovider"
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
|
|
@ -14,6 +13,11 @@
|
|||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||
android:resource="@xml/filepaths"/>
|
||||
</provider>
|
||||
|
||||
|
||||
<provider
|
||||
android:authorities="${applicationId}.KtxInstaller"
|
||||
android:name=".Ktx"
|
||||
android:exported="false"/>
|
||||
|
||||
</application>
|
||||
</manifest>
|
||||
|
|
|
|||
|
|
@ -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<String>?,
|
||||
selection: String?,
|
||||
selectionArgs: Array<String>?,
|
||||
sortOrder: String?
|
||||
): Cursor? = null
|
||||
|
||||
|
||||
override fun update(uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array<String>?): Int = 0
|
||||
|
||||
override fun delete(uri: Uri, selection: String?, selectionArgs: Array<String>?): Int = 0
|
||||
|
||||
override fun getType(uri: Uri): String? = null
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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("应用进入后台")
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Activity>()
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue