提交 ce5f329a authored 作者: kongdywang's avatar kongdywang

1. Avoid the problem that some functions in the SDK cannot be used normally…

1. Avoid the problem that some functions in the SDK cannot be used normally after a cold start on some models. 2. After the plugin executes onDetachedFromEngine, Picture-in-Picture will be forcibly closed to prevent problems caused by inconsistent variables.
上级 6709e6c4
...@@ -145,27 +145,32 @@ public class FTXPIPManager implements TXSimpleEventBus.EventSubscriber, FtxMessa ...@@ -145,27 +145,32 @@ public class FTXPIPManager implements TXSimpleEventBus.EventSubscriber, FtxMessa
public int isSupportDevice() { public int isSupportDevice() {
int pipResult = FTXEvent.NO_ERROR; int pipResult = FTXEvent.NO_ERROR;
Activity activity = TXFlutterEngineHolder.getInstance().getCurActivity(); Activity activity = TXFlutterEngineHolder.getInstance().getCurActivity();
if (!activity.isDestroyed()) { if (null != activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (!activity.isDestroyed()) {
// check permission if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
boolean isSuccess = // check permission
activity.getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE); boolean isSuccess =
if (!isSuccess) { activity.getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE);
pipResult = FTXEvent.ERROR_PIP_FEATURE_NOT_SUPPORT; if (!isSuccess) {
LiteavLog.e(TAG, "enterPip failed,because PIP feature is disabled"); pipResult = FTXEvent.ERROR_PIP_FEATURE_NOT_SUPPORT;
} else if (!hasPipPermission(activity)) { LiteavLog.e(TAG, "enterPip failed,because PIP feature is disabled");
pipResult = FTXEvent.ERROR_PIP_DENIED_PERMISSION; } else if (!hasPipPermission(activity)) {
LiteavLog.e(TAG, "enterPip failed,because PIP has no permission"); pipResult = FTXEvent.ERROR_PIP_DENIED_PERMISSION;
LiteavLog.e(TAG, "enterPip failed,because PIP has no permission");
}
} else {
pipResult = FTXEvent.ERROR_PIP_LOWER_VERSION;
LiteavLog.e(TAG, "enterPip failed,because android version is too low,"
+ "Minimum supported version is android 24,but current is "
+ Build.VERSION.SDK_INT);
} }
} else { } else {
pipResult = FTXEvent.ERROR_PIP_LOWER_VERSION; pipResult = FTXEvent.ERROR_PIP_ACTIVITY_DESTROYED;
LiteavLog.e(TAG, "enterPip failed,because android version is too low," LiteavLog.e(TAG, "enterPip failed,because activity is destroyed");
+ "Minimum supported version is android 24,but current is "
+ Build.VERSION.SDK_INT);
} }
} else { } else {
pipResult = FTXEvent.ERROR_PIP_ACTIVITY_DESTROYED; pipResult = FTXEvent.ERROR_PIP_ACTIVITY_DESTROYED;
LiteavLog.e(TAG, "enterPip failed,because activity is destroyed"); LiteavLog.e(TAG, "current activity is null, please check cur act status!");
} }
return pipResult; return pipResult;
} }
......
...@@ -465,12 +465,12 @@ public class SuperPlayerPlugin implements FlutterPlugin, ActivityAware, ...@@ -465,12 +465,12 @@ public class SuperPlayerPlugin implements FlutterPlugin, ActivityAware,
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
LiteavLog.i(TAG, "onDetachedFromEngine"); LiteavLog.i(TAG, "onDetachedFromEngine");
mFTXDownloadManager.destroy(); mFTXDownloadManager.destroy();
mFlutterPluginBinding = null;
if (null != mOrientationManager) { if (null != mOrientationManager) {
mOrientationManager.disable(); mOrientationManager.disable();
} }
if (null != mTxPipManager) { if (null != mTxPipManager) {
mTxPipManager.releaseActivityListener(); mTxPipManager.releaseActivityListener();
mTxPipManager.exitPip();
} }
// Close the solution to the problem of the picture-in-picture click restore // Close the solution to the problem of the picture-in-picture click restore
// failure on some versions of Android 12. // failure on some versions of Android 12.
...@@ -480,6 +480,7 @@ public class SuperPlayerPlugin implements FlutterPlugin, ActivityAware, ...@@ -480,6 +480,7 @@ public class SuperPlayerPlugin implements FlutterPlugin, ActivityAware,
unregisterReceiver(); unregisterReceiver();
TXFlutterEngineHolder.getInstance().destroy(binding); TXFlutterEngineHolder.getInstance().destroy(binding);
TXLiveBase.setListener(null); TXLiveBase.setListener(null);
mFlutterPluginBinding = null;
} }
@Override @Override
......
...@@ -36,7 +36,7 @@ public class TXFlutterEngineHolder { ...@@ -36,7 +36,7 @@ public class TXFlutterEngineHolder {
public void attachBindLife(FlutterPlugin.FlutterPluginBinding binding) { public void attachBindLife(FlutterPlugin.FlutterPluginBinding binding) {
if (mLifeCallback != null) { if (mLifeCallback != null) {
LiteavLog.w(TAG, "TXFlutterEngineHolder is already attach"); LiteavLog.w(TAG, "TXFlutterEngineHolder is already attached");
return; return;
} }
if (null == binding) { if (null == binding) {
...@@ -52,6 +52,7 @@ public class TXFlutterEngineHolder { ...@@ -52,6 +52,7 @@ public class TXFlutterEngineHolder {
@Override @Override
public void onActivityStarted(@NonNull Activity activity) { public void onActivityStarted(@NonNull Activity activity) {
mFrontContextCount++; mFrontContextCount++;
LiteavLog.i(TAG, "activity is started:" + activity);
if (mIsEnterBack && mFrontContextCount > 0) { if (mIsEnterBack && mFrontContextCount > 0) {
mIsEnterBack = false; mIsEnterBack = false;
notifyResume(); notifyResume();
...@@ -61,6 +62,7 @@ public class TXFlutterEngineHolder { ...@@ -61,6 +62,7 @@ public class TXFlutterEngineHolder {
@Override @Override
public void onActivityResumed(@NonNull Activity activity) { public void onActivityResumed(@NonNull Activity activity) {
synchronized (mActivityList) { synchronized (mActivityList) {
LiteavLog.i(TAG, "activity is resumed:" + activity);
int index = findIndexByAct(activity); int index = findIndexByAct(activity);
if (index >= 0) { if (index >= 0) {
// refresh index // refresh index
...@@ -78,6 +80,7 @@ public class TXFlutterEngineHolder { ...@@ -78,6 +80,7 @@ public class TXFlutterEngineHolder {
@Override @Override
public void onActivityStopped(@NonNull Activity activity) { public void onActivityStopped(@NonNull Activity activity) {
mFrontContextCount--; mFrontContextCount--;
LiteavLog.i(TAG, "activity is stopped:" + activity);
if (!mIsEnterBack && mFrontContextCount <= 0) { if (!mIsEnterBack && mFrontContextCount <= 0) {
mIsEnterBack = true; mIsEnterBack = true;
notifyEnterBack(); notifyEnterBack();
...@@ -92,6 +95,7 @@ public class TXFlutterEngineHolder { ...@@ -92,6 +95,7 @@ public class TXFlutterEngineHolder {
@Override @Override
public void onActivityDestroyed(@NonNull Activity activity) { public void onActivityDestroyed(@NonNull Activity activity) {
synchronized (mActivityList) { synchronized (mActivityList) {
LiteavLog.i(TAG, "activity is destroyed:" + activity);
int index = findIndexByAct(activity); int index = findIndexByAct(activity);
if (index >= 0) { if (index >= 0) {
mActivityList.remove(index); mActivityList.remove(index);
...@@ -146,6 +150,7 @@ public class TXFlutterEngineHolder { ...@@ -146,6 +150,7 @@ public class TXFlutterEngineHolder {
} }
public void destroy(FlutterPlugin.FlutterPluginBinding binding) { public void destroy(FlutterPlugin.FlutterPluginBinding binding) {
LiteavLog.i(TAG, "called engine holder destroy");
if (null == mLifeCallback) { if (null == mLifeCallback) {
return; return;
} }
...@@ -153,6 +158,7 @@ public class TXFlutterEngineHolder { ...@@ -153,6 +158,7 @@ public class TXFlutterEngineHolder {
return; return;
} }
((Application)binding.getApplicationContext()).unregisterActivityLifecycleCallbacks(mLifeCallback); ((Application)binding.getApplicationContext()).unregisterActivityLifecycleCallbacks(mLifeCallback);
mLifeCallback = null;
} }
public void addAppLifeListener(TXAppStatusListener listener) { public void addAppLifeListener(TXAppStatusListener listener) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论