Skip to content
This repository was archived by the owner on Jul 16, 2024. It is now read-only.

Commit 1081a88

Browse files
committed
view.lifecycle 实现方式替换
1 parent fc4fc05 commit 1081a88

File tree

2 files changed

+2
-41
lines changed

2 files changed

+2
-41
lines changed

base/src/main/kotlin/io/goooler/demoapp/base/util/BaseExtensions.kt

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import androidx.annotation.ColorInt
2222
import androidx.annotation.IdRes
2323
import androidx.annotation.LayoutRes
2424
import androidx.annotation.MainThread
25-
import androidx.appcompat.app.AppCompatActivity
2625
import androidx.core.os.bundleOf
2726
import androidx.core.text.parseAsHtml
2827
import androidx.core.text.toSpannable
@@ -36,10 +35,8 @@ import androidx.fragment.app.commit
3635
import androidx.fragment.app.findFragment
3736
import androidx.lifecycle.Lifecycle
3837
import androidx.lifecycle.LifecycleCoroutineScope
39-
import androidx.lifecycle.LifecycleOwner
4038
import androidx.lifecycle.LiveData
4139
import androidx.lifecycle.MutableLiveData
42-
import androidx.lifecycle.ViewTreeLifecycleOwner
4340
import androidx.lifecycle.coroutineScope
4441
import androidx.lifecycle.findViewTreeLifecycleOwner
4542
import kotlinx.coroutines.CoroutineScope
@@ -419,17 +416,7 @@ inline val View.attachedActivity: Activity?
419416
return baseContext as? Activity
420417
}
421418

422-
/**
423-
* 这里不使用 [findViewTreeLifecycleOwner] 方法是因为 [AppCompatActivity] 中没有实现
424-
* [ViewTreeLifecycleOwner.set] 方法,在 activity 中的 view 会获取不到 [LifecycleOwner]
425-
*
426-
* todo 等升级 AppCompat 1.3.0 之后使用 [findViewTreeLifecycleOwner] 代替内部实现
427-
*/
428-
inline val View.lifecycle: Lifecycle?
429-
get() {
430-
return attachedFragment?.viewLifecycleOwner?.lifecycle
431-
?: (attachedActivity as? FragmentActivity)?.lifecycle
432-
}
419+
inline val View.lifecycle: Lifecycle? get() = findViewTreeLifecycleOwner()?.lifecycle
433420

434421
inline val View.lifecycleScope: LifecycleCoroutineScope? get() = lifecycle?.coroutineScope
435422

web/src/main/kotlin/io/goooler/demoapp/web/CompatWebView.kt

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package io.goooler.demoapp.web
22

3-
import android.app.Activity
43
import android.content.Context
5-
import android.content.ContextWrapper
64
import android.net.Uri
75
import android.net.http.SslError
86
import android.util.AttributeSet
@@ -14,9 +12,6 @@ import android.webkit.WebChromeClient
1412
import android.webkit.WebSettings
1513
import android.webkit.WebView
1614
import androidx.annotation.IntRange
17-
import androidx.fragment.app.Fragment
18-
import androidx.fragment.app.FragmentActivity
19-
import androidx.fragment.app.findFragment
2015
import androidx.lifecycle.DefaultLifecycleObserver
2116
import androidx.lifecycle.LifecycleOwner
2217
import androidx.lifecycle.findViewTreeLifecycleOwner
@@ -41,7 +36,7 @@ open class CompatWebView(context: Context, attrs: AttributeSet? = null) : WebVie
4136

4237
override fun onAttachedToWindow() {
4338
super.onAttachedToWindow()
44-
attachToLifecycle()
39+
findViewTreeLifecycleOwner()?.lifecycle?.addObserver(lifecycleObserver)
4540
}
4641

4742
private fun initWebViewSettings() {
@@ -109,27 +104,6 @@ open class CompatWebView(context: Context, attrs: AttributeSet? = null) : WebVie
109104
}
110105
}
111106

112-
/**
113-
* todo 等升级 AppCompat 1.3.0 之后使用 [findViewTreeLifecycleOwner] 代替内部实现
114-
*/
115-
private fun attachToLifecycle() {
116-
val fragment: Fragment? = try {
117-
findFragment()
118-
} catch (_: Exception) {
119-
null
120-
}
121-
if (fragment != null) {
122-
fragment.viewLifecycleOwner.lifecycle.addObserver(lifecycleObserver)
123-
} else {
124-
var baseContext: Context? = context
125-
while (baseContext is ContextWrapper) {
126-
if (baseContext is Activity) break
127-
baseContext = baseContext.baseContext
128-
}
129-
(baseContext as? FragmentActivity)?.lifecycle?.addObserver(lifecycleObserver)
130-
}
131-
}
132-
133107
private val lifecycleObserver = object : DefaultLifecycleObserver {
134108
override fun onResume(owner: LifecycleOwner) {
135109
onResume()

0 commit comments

Comments
 (0)