diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FullVideoUtils.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FullVideoUtils.kt index 9c39045642..306e5b05bf 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FullVideoUtils.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FullVideoUtils.kt @@ -82,7 +82,7 @@ object FullVideoUtils { } try { if (windowManager != null) { - windowManager!!.removeView(lastOverlayView) + windowManager!!.removeViewImmediate(lastOverlayView) windowManager = null } if (lastOverlayView != null) { diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/RecyclerVideoAdapter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/RecyclerVideoAdapter.java index dbe1ff2108..4e01541cd3 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/RecyclerVideoAdapter.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/RecyclerVideoAdapter.java @@ -14,6 +14,7 @@ import com.bumptech.glide.request.RequestOptions; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.och.taxi.passenger.R; import com.mogo.och.taxi.passenger.bean.TaxiPassengerVideoPlay; +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack; import java.util.List; @@ -23,6 +24,7 @@ public class RecyclerVideoAdapter extends RecyclerView.Adapter itemDataList = null; private Context context = null; private OnThumbImageClilckListener onThumbImageClilckListener; + private RecyclerView recyclerView; public OnThumbImageClilckListener getOnThumbImageClilckListener() { return onThumbImageClilckListener; @@ -32,9 +34,10 @@ public class RecyclerVideoAdapter extends RecyclerView.Adapter itemDataList) { + public RecyclerVideoAdapter(Context context, List itemDataList,RecyclerView recyclerView) { this.itemDataList = itemDataList; this.context = context; + this.recyclerView = recyclerView; } public TaxiPassengerVideoPlay getItemByPosition(int position){ @@ -53,6 +56,8 @@ public class RecyclerVideoAdapter extends RecyclerView.Adapter(R.id.video_item_player) prePlayer?.onVideoReset() val taxiPassengerVideoPlay = arrayListOf[centerItemPosition] - setBackageAndPlayNext(taxiPassengerVideoPlay, player, centerItemPosition) + setBackageAndPlayNext(taxiPassengerVideoPlay) } else { player.onVideoResume(false) } @@ -225,6 +225,7 @@ class VideoActivity : AppCompatActivity() { } indicatorView.onPageScrolled(currentIndex, fl, 0) } + val recyclerVideoAdapter = RecyclerVideoAdapter(this, arrayListOf,rvVideoPlaylist) recyclerVideoAdapter.setOnThumbImageClilckListener { val (_: Int, player) = getPlayer(carouselLayoutManager) if (player is ConsultVideoPlayer) { @@ -259,11 +260,7 @@ class VideoActivity : AppCompatActivity() { } - private fun setBackageAndPlayNext( - taxiPassengerVideoPlay: TaxiPassengerVideoPlay, - player: ConsultVideoPlayer, - centerItemPosition: Int, - ) { + private fun setBackageAndPlayNext(taxiPassengerVideoPlay: TaxiPassengerVideoPlay) { // 设置背景图片 Glide.with(this).asBitmap() .load(taxiPassengerVideoPlay.imageUrl) @@ -280,36 +277,6 @@ class VideoActivity : AppCompatActivity() { clContain.background = BitmapDrawable(resources, resource) } }) - if (player.getVideoAllCallBack() == null) { - player.setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onAutoComplete(url: String?, vararg objects: Any?) { - player.onVideoReset() - val itemCount = rvVideoPlaylist?.adapter?.itemCount - itemCount?.let { - if (centerItemPosition == itemCount - 1) { - rvVideoPlaylist?.smoothScrollToPosition(0) - } else { - rvVideoPlaylist?.smoothScrollToPosition(centerItemPosition + 1) - } - } - } - - override fun onClickBlank(url: String?, vararg objects: Any?) { - super.onClickBlank(url, *objects) - rvVideoPlaylist?.smoothScrollToPosition(centerItemPosition) - } - - override fun onPlayError(url: String?, vararg objects: Any?) { - super.onPlayError(url, *objects) - ToastUtils.showLong("哎呀,出错了,看看其他视频吧") - } - - override fun onClickStartError(url: String?, vararg objects: Any?) { - super.onClickStartError(url, *objects) - ToastUtils.showLong("哎呀,出错了,看看其他视频吧") - } - }) - } } override fun onAttachedToWindow() { @@ -322,13 +289,15 @@ class VideoActivity : AppCompatActivity() { OverlayLeftViewUtils.showOverlayView(this,isOpen = false, checkIndex = OverlayLeftViewUtils.MOVIE) } } - OverlayLeftViewUtils.addDragTarget(vOpenLeft) } override fun onResume() { super.onResume() val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) + if(centerItemPosition<0){ + setBackageAndPlayNext(arrayListOf[0]) + } player?.let { if (player.isIfCurrentIsFullscreen) {// 全屏了 @@ -340,13 +309,7 @@ class VideoActivity : AppCompatActivity() { GSYVideoView.CURRENT_STATE_PLAYING -> { } else -> { - val recyclerVideoAdapter = - rvVideoPlaylist?.adapter as RecyclerVideoAdapter - setBackageAndPlayNext( - recyclerVideoAdapter.getItemByPosition(centerItemPosition), - player, centerItemPosition - ) - //player.startPlayLogic() + } } } @@ -375,6 +338,7 @@ class VideoActivity : AppCompatActivity() { super.onDestroy() releaseOnNewInstance() OverlayLeftViewUtils.dismissOverlayView() + FixMemoryLeak.fixLeak(this) } private fun releaseOnNewInstance() { diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/FixMemoryLeak.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/FixMemoryLeak.java new file mode 100644 index 0000000000..f6e57ae403 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/FixMemoryLeak.java @@ -0,0 +1,42 @@ +package com.mogo.och.taxi.passenger.utils; + +import android.content.Context; +import android.view.inputmethod.InputMethodManager; + +import java.lang.reflect.Field; + +/** + * memory leak fix: + *

+ * InputMethodManager#mLastSrvView reference Last Page Activity. + */ +public class FixMemoryLeak { + + private static Field field; + private static boolean hasField = true; + + public static void fixLeak(Context context) { + if (!hasField) { + return; + } + InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); + if (imm == null) { + return; + } + + try { + if (field == null) { + field = imm.getClass().getDeclaredField("mCurRootView"); + } + if (field == null) { + hasField = false; + } + if (field != null) { + field.setAccessible(true); + field.set(imm, null); + } + } catch (Throwable t) { + hasField = false; + } + } +} \ No newline at end of file