Skip to content

Commit 0b44a95

Browse files
authored
Merge pull request #8 from Petterpx/dev
fix:修复Android9.0以下出现的topActivity内存泄漏与部分回调未执行
2 parents 7e6170b + 2998116 commit 0b44a95

4 files changed

Lines changed: 20 additions & 121 deletions

File tree

app/src/main/java/com/petterp/floatingx/app/CustomApplication.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class CustomApplication : Application() {
3333
ImmersedActivity::class.java
3434
)
3535
setTagActivityLifecycle {
36-
onActivityPreResumed = {
36+
onActivityResumed = {
3737
Log.e("petterp", "onActivityPreResumed")
3838
}
3939
}

core/src/main/java/com/petterp/floatingx/ext/FxExt.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ internal inline fun <reified T : Any> lazyLoad(
2121
}
2222

2323
internal val topActivity: Activity?
24-
get() = FloatingX.iFxAppLifecycleImpl?.topActivity
24+
get() = FloatingX.iFxAppLifecycleImpl?.topActivity?.get()
2525

2626
internal val appContext: Context
2727
get() = FloatingX.helper?.context

core/src/main/java/com/petterp/floatingx/impl/FxLifecycleCallbackImpl.kt

Lines changed: 18 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.petterp.floatingx.config.FxHelper
77
import com.petterp.floatingx.ext.FxDebug
88
import com.petterp.floatingx.ext.fxParentView
99
import com.petterp.floatingx.listener.IFxControl
10+
import java.lang.ref.WeakReference
1011

1112
/**
1213
* @Author petterp
@@ -19,7 +20,7 @@ class FxLifecycleCallbackImpl(
1920
) :
2021
Application.ActivityLifecycleCallbacks {
2122
internal var control: IFxControl? = null
22-
internal var topActivity: Activity? = null
23+
internal var topActivity: WeakReference<Activity>? = null
2324

2425
private val Activity.isParent: Boolean
2526
get() = control?.getView()?.parent === fxParentView
@@ -36,17 +37,18 @@ class FxLifecycleCallbackImpl(
3637
}
3738

3839
override fun onActivityStarted(activity: Activity) {
39-
topActivity = activity
40+
initActivity(activity)
4041
FxDebug.d("AppLifecycle--[${activity.name}]-onActivityStarted")
4142
helper.fxLifecycleExpand?.onActivityStarted?.let {
4243
if (activity.isActivityInValid) it.invoke(activity)
4344
}
4445
}
4546

4647
override fun onActivityResumed(activity: Activity) {
48+
initActivity(activity)
49+
FxDebug.d("AppLifecycle--[${activity.name}]-onActivityResumed")
4750
val isActivityInValid = activity.isActivityInValid
4851
val isParent = activity.isParent
49-
FxDebug.d("AppLifecycle--[${activity.name}]-onActivityResumed")
5052
FxDebug.d("view->isAttach? isContainActivity-$isActivityInValid--enableFx-${helper.enableFx}---isParent-$isParent")
5153
if (helper.enableFx && isActivityInValid && !isParent)
5254
control?.attach(activity)
@@ -69,105 +71,18 @@ class FxLifecycleCallbackImpl(
6971
}
7072
}
7173

72-
override fun onActivityPostDestroyed(activity: Activity) {
73-
if (topActivity === activity) topActivity = null
74-
val isParent = activity.isParent
75-
FxDebug.d("AppLifecycle--[${activity.name}]-onActivityPostDestroyed")
76-
FxDebug.d("view->isDetach? isContainActivity-${activity.isActivityInValid}--enableFx-${helper.enableFx}---isParent-$isParent")
77-
if (helper.enableFx && isParent)
78-
control?.detach(activity)
79-
helper.fxLifecycleExpand?.onActivityPostDestroyed?.let {
80-
if (activity.isActivityInValid) it.invoke(activity)
81-
}
82-
}
83-
8474
override fun onActivityDestroyed(activity: Activity) {
85-
FxDebug.d("AppLifecycle--[${activity.name}]-onActivityDestroyed")
8675
helper.fxLifecycleExpand?.onActivityDestroyed?.let {
8776
if (activity.isActivityInValid) it.invoke(activity)
8877
}
89-
}
90-
91-
override fun onActivityPostPaused(activity: Activity) {
92-
helper.fxLifecycleExpand?.onActivityPostPaused?.let {
93-
if (activity.isActivityInValid) it.invoke(activity)
94-
}
95-
}
96-
97-
override fun onActivityPostStopped(activity: Activity) {
98-
helper.fxLifecycleExpand?.onActivityPostStopped?.let {
99-
if (activity.isActivityInValid) it.invoke(activity)
100-
}
101-
}
102-
103-
override fun onActivityPreDestroyed(activity: Activity) {
104-
helper.fxLifecycleExpand?.onActivityPreDestroyed?.let {
105-
if (activity.isActivityInValid) it.invoke(activity)
106-
}
107-
}
108-
109-
override fun onActivityPreCreated(activity: Activity, savedInstanceState: Bundle?) {
110-
helper.fxLifecycleExpand?.onActivityPreCreated?.let {
111-
if (activity.isActivityInValid) it.invoke(activity, savedInstanceState)
112-
}
113-
}
114-
115-
override fun onActivityPrePaused(activity: Activity) {
116-
super.onActivityPrePaused(activity)
117-
helper.fxLifecycleExpand?.onActivityPrePaused?.let {
118-
if (activity.isActivityInValid) it.invoke(activity)
119-
}
120-
}
121-
122-
override fun onActivityPreResumed(activity: Activity) {
123-
super.onActivityPreResumed(activity)
124-
helper.fxLifecycleExpand?.onActivityPreResumed?.let {
125-
if (activity.isActivityInValid) it.invoke(activity)
126-
}
127-
}
128-
129-
override fun onActivityPostSaveInstanceState(activity: Activity, outState: Bundle) {
130-
helper.fxLifecycleExpand?.onActivityPostSaveInstanceState?.let {
131-
if (activity.isActivityInValid) it.invoke(activity, outState)
132-
}
133-
}
134-
135-
override fun onActivityPreSaveInstanceState(activity: Activity, outState: Bundle) {
136-
super.onActivityPreSaveInstanceState(activity, outState)
137-
helper.fxLifecycleExpand?.onActivityPreSaveInstanceState?.let {
138-
if (activity.isActivityInValid) it.invoke(activity, outState)
139-
}
140-
}
141-
142-
override fun onActivityPreStopped(activity: Activity) {
143-
super.onActivityPreStopped(activity)
144-
helper.fxLifecycleExpand?.onActivityPreStopped?.let {
145-
if (activity.isActivityInValid) it.invoke(activity)
146-
}
147-
}
148-
149-
override fun onActivityPostResumed(activity: Activity) {
150-
topActivity = activity
151-
helper.fxLifecycleExpand?.onActivityPostResumed?.let {
152-
if (activity.isActivityInValid) it.invoke(activity)
153-
}
154-
}
155-
156-
override fun onActivityPostStarted(activity: Activity) {
157-
helper.fxLifecycleExpand?.onActivityPostStarted?.let {
158-
if (activity.isActivityInValid) it.invoke(activity)
159-
}
160-
}
161-
162-
override fun onActivityPreStarted(activity: Activity) {
163-
helper.fxLifecycleExpand?.onActivityPreStarted?.let {
164-
if (activity.isActivityInValid) it.invoke(activity)
165-
}
166-
}
167-
168-
override fun onActivityPostCreated(activity: Activity, savedInstanceState: Bundle?) {
169-
helper.fxLifecycleExpand?.onActivityPostCreated?.let {
170-
if (activity.isActivityInValid) it.invoke(activity)
78+
val isParent = activity.isParent
79+
FxDebug.d("AppLifecycle--[${activity.name}]-onActivityDestroyed")
80+
FxDebug.d("view->isDetach? isContainActivity-${activity.isActivityInValid}--enableFx-${helper.enableFx}---isParent-$isParent")
81+
if (helper.enableFx && isParent)
82+
control?.detach(activity)
83+
if (topActivity?.get() === activity) {
84+
topActivity?.clear()
85+
topActivity = null
17186
}
17287
}
17388

@@ -176,4 +91,9 @@ class FxLifecycleCallbackImpl(
17691
if (activity.isActivityInValid) it.invoke(activity, outState)
17792
}
17893
}
94+
95+
private fun initActivity(activity: Activity) {
96+
if (topActivity?.get() != activity)
97+
topActivity = WeakReference(activity)
98+
}
17999
}

core/src/main/java/com/petterp/floatingx/impl/FxLifecycleExpand.kt

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,11 @@ import android.os.Bundle
1111
* PS: 只有显示悬浮窗的Activity的才会被回调相应生命周期
1212
*/
1313
class FxLifecycleExpand {
14-
15-
var onActivityPostCreated: ((Activity) -> Unit)? = null
1614
var onActivityCreated: ((Activity, Bundle?) -> Unit)? = null
17-
var onActivityPreCreated: ((Activity, Bundle?) -> Unit)? = null
18-
19-
var onActivityPostStarted: ((Activity) -> Unit)? = null
2015
var onActivityStarted: ((Activity) -> Unit)? = null
21-
var onActivityPreStarted: ((Activity) -> Unit)? = null
22-
23-
var onActivityPostResumed: ((Activity) -> Unit)? = null
2416
var onActivityResumed: ((Activity) -> Unit)? = null
25-
var onActivityPreResumed: ((Activity) -> Unit)? = null
26-
27-
var onActivityPostPaused: ((Activity) -> Unit)? = null
2817
var onActivityPaused: ((Activity) -> Unit)? = null
29-
var onActivityPrePaused: ((Activity) -> Unit)? = null
30-
31-
var onActivityPostStopped: ((Activity) -> Unit)? = null
3218
var onActivityStopped: ((Activity) -> Unit)? = null
33-
var onActivityPreStopped: ((Activity) -> Unit)? = null
34-
35-
var onActivityPostSaveInstanceState: ((Activity, Bundle) -> Unit?)? = null
36-
var onActivityPreSaveInstanceState: ((Activity, Bundle) -> Unit?)? = null
3719
var onActivitySaveInstanceState: ((Activity, Bundle) -> Unit?)? = null
38-
39-
var onActivityPostDestroyed: ((Activity) -> Unit)? = null
4020
var onActivityDestroyed: ((Activity) -> Unit)? = null
41-
var onActivityPreDestroyed: ((Activity) -> Unit)? = null
4221
}

0 commit comments

Comments
 (0)