From e276a458612b51d0c9cc0327947f2f17b8f8c32f Mon Sep 17 00:00:00 2001 From: luckydzp Date: Tue, 28 Dec 2021 10:14:05 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=96=B0=E7=9A=84gradle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index d4d839a4..94f747aa 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.2' + classpath 'com.android.tools.build:gradle:7.0.3' // classpath 'com.novoda:bintray-release:0.9.2' } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4a8b9970..294dfa7b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip From 12840b5cf7019472c51978047ea23d00b568635f Mon Sep 17 00:00:00 2001 From: luckydzp Date: Tue, 28 Dec 2021 10:17:50 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 94f747aa..f5799ab6 100644 --- a/build.gradle +++ b/build.gradle @@ -23,11 +23,11 @@ task clean(type: Delete) { } ext { - compileSdkVersion = 29 + compileSdkVersion = 30 minSdkVersion = 14 - targetSdkVersion = compileSdkVersion + targetSdkVersion = 26 - appCompatVersion = "1.2.0-rc01" + appCompatVersion = "1.1.0-rc01" // userOrg = "jantxue" // groupId = "me.xuexuan" From b94dce2631ce8220fc3d9dc90a8a0f0a8c1637f9 Mon Sep 17 00:00:00 2001 From: luckydzp Date: Tue, 28 Dec 2021 10:23:22 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BB=A5=E4=B8=8Bbug:=20?= =?UTF-8?q?daizhipeng=E4=BF=AE=E6=94=B9=20=E8=A7=A3=E5=86=B3viewpager?= =?UTF-8?q?=E5=BF=AB=E9=80=9F=E5=88=87=E6=8D=A2=E5=AF=BC=E8=87=B4=E7=94=9F?= =?UTF-8?q?=E5=91=BD=E5=91=A8=E5=A4=B1=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20=E5=BF=AB=E9=80=9F=E5=88=87=E6=8D=A2=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E4=BB=A5=E4=B8=8B=E6=83=85=E5=86=B5=20page?= =?UTF-8?q?=E5=9C=A8=E7=9A=84visible=E9=80=BB=E8=BE=91=E5=9C=A8=E9=98=9F?= =?UTF-8?q?=E5=88=97=E4=B8=AD=E8=BF=98=E6=9C=AA=E6=89=A7=E8=A1=8C,?= =?UTF-8?q?=E6=AD=A4=E6=97=B6=E8=B0=83=E7=94=A8page=E7=9A=84invisible?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=B8=8D=E6=88=90=E5=8A=9F(=E5=9B=A0page?= =?UTF-8?q?=E8=BF=98=E6=9C=AAvisible)=20=E6=AD=A4=E6=97=B6page=20visible?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E5=90=8E,=E9=85=8D=E5=AF=B9=E7=9A=84invisibl?= =?UTF-8?q?e=E5=B7=B2=E7=BB=8F=E9=94=99=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../helper/internal/VisibleDelegate.java | 50 ++++++++++++++++--- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/fragmentation_core/src/main/java/me/yokeyword/fragmentation/helper/internal/VisibleDelegate.java b/fragmentation_core/src/main/java/me/yokeyword/fragmentation/helper/internal/VisibleDelegate.java index 2fadc537..5a8fa1ff 100644 --- a/fragmentation_core/src/main/java/me/yokeyword/fragmentation/helper/internal/VisibleDelegate.java +++ b/fragmentation_core/src/main/java/me/yokeyword/fragmentation/helper/internal/VisibleDelegate.java @@ -4,6 +4,7 @@ import android.os.Handler; import android.os.Looper; import android.os.MessageQueue; +import android.util.Log; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; @@ -97,8 +98,7 @@ public void onResume() { public void onPause() { //界面还没有执行到initVisible 发出的任务taskDispatchSupportVisible,界面就已经pause。 //为了让下次resume 时候,能正常的执行需要设置mAbortInitVisible ,来确保在resume的时候,可以执行完整initVisible - if (mIdleDispatchSupportVisible != null) { - Looper.myQueue().removeIdleHandler(mIdleDispatchSupportVisible); + if (checkSetVisibleHandler()){ mAbortInitVisible = true; return; } @@ -120,6 +120,9 @@ public void onHiddenChanged(boolean hidden) { return; } if (hidden) { + if (checkSetVisibleHandler()){ + mAbortInitVisible = true; + } dispatchSupportVisible(false); } else { safeDispatchUserVisibleHint(true); @@ -151,21 +154,52 @@ public void onDestroyView() { mIsOnceVisible = false; } + + // daizhipeng修改 解决viewpager快速切换导致生命周失效的问题 + // 快速切换可以出现以下情况 + // page在的visible逻辑在队列中还未执行,此时调用page的invisible逻辑不成功(因page还未visible) + // 此时page visible成功后,配对的invisible已经错失 + public void setUserVisibleHint(boolean isVisibleToUser) { +// Log.d("sky-frg", "setUserVisibleHint1:" + isVisibleToUser); if (mFragment.isResumed() || (!mFragment.isAdded() && isVisibleToUser)) { - if (!mCurrentVisible && isVisibleToUser) { - safeDispatchUserVisibleHint(true); - } else if (mCurrentVisible && !isVisibleToUser) { - dispatchSupportVisible(false); +// Log.d("sky-frg", "setUserVisibleHint2:" + isVisibleToUser + " mCurrentVisible:" + mCurrentVisible); + + if (isVisibleToUser) { + if (!mCurrentVisible) { +// Log.d("sky-frg", "setUserVisibleHint3"); + safeDispatchUserVisibleHint(true); + } + } else { + if (mCurrentVisible) { + dispatchSupportVisible(false); + } else if (checkSetVisibleHandler()){ + mAbortInitVisible = true; + } + } + + } } + // daizhipeng修改 增加事件对列检测逻辑 + // 当队列中有page visible handler时,删除 + private boolean checkSetVisibleHandler() { + if (mIdleDispatchSupportVisible != null) { + Looper.myQueue().removeIdleHandler(mIdleDispatchSupportVisible); + mIdleDispatchSupportVisible = null; + return true; + } + return false; + } + + private void safeDispatchUserVisibleHint(boolean visible) { if (visible) { enqueueDispatchVisible(); - }else { + } else { if (mIsOnceVisible) { dispatchSupportVisible(false); } @@ -174,6 +208,8 @@ private void safeDispatchUserVisibleHint(boolean visible) { private void enqueueDispatchVisible() { + checkSetVisibleHandler(); + mIdleDispatchSupportVisible = new MessageQueue.IdleHandler() { @Override public boolean queueIdle() {