RemoteCallbackList 实时使用实时创建

This commit is contained in:
yangyakun
2022-08-09 18:13:18 +08:00
parent acbf2106cf
commit bda2df009b
3 changed files with 154 additions and 84 deletions

View File

@@ -14,14 +14,21 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI_P
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.eagle.core.utilcode.util.Utils
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.NumberFormatUtil
import com.mogo.och.taxi.passenger.R
import com.mogo.och.taxi.passenger.event.FinishActivity
import com.mogo.och.taxi.passenger.mulprocess.BinderCursor
import com.mogo.och.taxi.passenger.mulprocess.BinderProvider
import com.mogo.och.taxi.passenger.mulprocess.ICallback
import com.mogo.och.taxi.passenger.mulprocess.ILeftMenuService
import com.mogo.och.taxi.passenger.ui.video.FloatingDistanceInfoUtils
import com.mogo.och.taxi.passenger.ui.video.VideoActivity
import org.greenrobot.eventbus.EventBus
import rx.Observable
import rx.Observer
import rx.schedulers.Schedulers
import java.util.*
@SuppressLint("StaticFieldLeak")
@@ -43,7 +50,7 @@ object LeftMenuOpen {
private var orderService: ILeftMenuService? = null
private var icallbacks: RemoteCallbackList<ICallback> = RemoteCallbackList<ICallback>()
private var icallbacks: RemoteCallbackList<ICallback>? = null
var checkIndex = OverlayLeftViewUtils.LIVE
private var lastClickTime = 0L
@@ -80,6 +87,7 @@ object LeftMenuOpen {
cu?.let {
it.close()
cu = null
orderService = null
}
val iterator = dragList.iterator()
@@ -175,9 +183,6 @@ object LeftMenuOpen {
fun registerDragView(view: View?) {
if (view != null) {
dragList.add(view)
// if (orderService == null) {
// registerC()
// }
view.setOnTouchListener(ItemViewTouchListener())
view.setOnClickListener {
open?.let { it1 -> it1(windowView!!, windowManager) }
@@ -200,46 +205,84 @@ object LeftMenuOpen {
}
fun transmissionIndex(index:Int){
CallerLogger.d(M_TAXI_P + TAG, "tran--transmissionIndex---$index")
if (orderService == null) {
registerC()
}
orderService?.transmissionIndex(index)
Observable.empty<String?>().subscribeOn(Schedulers.io())
.subscribe(object : Observer<String?> {
override fun onCompleted() {
CallerLogger.d(M_TAXI_P + TAG, "tran--transmissionIndex---$index")
if (orderService == null) {
registerC()
}
orderService?.transmissionIndex(index)
}
override fun onError(e: Throwable?) {}
override fun onNext(t: String?) {}
})
}
/**
* 主进程调用
*/
fun registerCallbackHost(cb:ICallback?){
// if (orderService == null) {
// registerC()
// }
if(icallbacks==null){
icallbacks = RemoteCallbackList<ICallback>()
}
cb?.let {
icallbacks.register(it)
icallbacks?.register(it)
}
}
/**
* 主进程调用 反注册
*/
fun unregisterCallbackHost(cb:ICallback?){
cb?.let {
icallbacks.unregister(it)
icallbacks?.unregister(it)
}
icallbacks?.kill()
icallbacks = null
}
/**
* 子进程调用 注册回调 主进程中调用
* 方便主进程传递到子进程 速度、剩余公里、剩余时间、到达时间
*/
fun registerCallback(cb:ICallback?){
CallerLogger.d(M_TAXI_P + TAG, "tran--registerCallback--注册")
if (orderService == null) {
registerC()
}
cb?.let {
orderService?.registerCallback(it)
}
Observable.empty<String?>().subscribeOn(Schedulers.io())
.subscribe(object : Observer<String?> {
override fun onCompleted() {
CallerLogger.d(M_TAXI_P + TAG, "tran--registerCallback--注册")
if (orderService == null) {
registerC()
}
cb?.let {
orderService?.registerCallback(it)
}
}
override fun onError(e: Throwable?) {}
override fun onNext(t: String?) {}
})
}
/**
* 子进程调用 反注册
*/
fun unregisterCallback(cb:ICallback?){
CallerLogger.d(M_TAXI_P + TAG, "tran--unregisterCallback--反注册")
cb?.let {
orderService?.unRegisterCallback(it)
}
Observable.empty<String?>().subscribeOn(Schedulers.io())
.subscribe(object : Observer<String?> {
override fun onCompleted() {
CallerLogger.d(M_TAXI_P + TAG, "tran--unregisterCallback--反注册")
cb?.let {
orderService?.unRegisterCallback(it)
}
}
override fun onError(e: Throwable?) {}
override fun onNext(t: String?) {}
})
}
/**
* 主进程调用 向子进程传输 剩余距离、剩余时间、和速度
*/
fun callCallBack(meters: Long,timeInSecond: Long,speed:Float){
if(checkIndex == OverlayLeftViewUtils.CONSULT||checkIndex == OverlayLeftViewUtils.MOVIE) {
if (System.currentTimeMillis() - lastClickTime < FAST_CLICK_DELAY_TIME){
@@ -252,15 +295,17 @@ object LeftMenuOpen {
override fun onCompleted() {
CallerLogger.d(M_TAXI_P + TAG, "callCallBack$meters--$timeInSecond--$speed")
try {
val len = icallbacks.beginBroadcast()
for (i in 0 until len) {
try {
icallbacks.getBroadcastItem(i).onResult(meters, timeInSecond, speed)
} catch (e: RemoteException) {
e.printStackTrace()
val len = icallbacks?.beginBroadcast()
len?.let {
for (i in 0 until len) {
try {
icallbacks?.getBroadcastItem(i)?.onResult(meters, timeInSecond, speed)
} catch (e: RemoteException) {
e.printStackTrace()
}
}
}
icallbacks.finishBroadcast()
icallbacks?.finishBroadcast()
}catch (e:Exception){
CallerLogger.e(M_TAXI_P + TAG, "callCallBack${e.message}")
}
@@ -272,15 +317,24 @@ object LeftMenuOpen {
}
fun invoKeyByEventType(typeID:Int){
val len = icallbacks.beginBroadcast()
for (i in 0 until len) {
try {
icallbacks.getBroadcastItem(i).postEvent(typeID)
} catch (e: RemoteException) {
e.printStackTrace()
}
}
icallbacks.finishBroadcast()
Observable.empty<String?>().subscribeOn(Schedulers.io())
.subscribe(object : Observer<String?> {
override fun onCompleted() {
val len = icallbacks?.beginBroadcast()
len?.let {
for (i in 0 until it) {
try {
icallbacks?.getBroadcastItem(i)?.postEvent(typeID)
} catch (e: RemoteException) {
e.printStackTrace()
}
}
}
icallbacks?.finishBroadcast()
}
override fun onError(e: Throwable?) {}
override fun onNext(t: String?) {}
})
}
/**
@@ -320,4 +374,44 @@ object LeftMenuOpen {
val w = extras.getParcelable<BinderCursor.BinderParcelable>("binder")
return w!!.mBinder
}
val callBack = object : ICallback.Stub() {
override fun onResult(meters :Long, timeInSecond:Long,speed:Float) {
if(speed<0){
// 距离单位
var disUnit = "公里"
// 距离
var remainDis: String? = "0"
if (meters > 0) {
if (meters / 1000 < 1) {
disUnit = ""
remainDis = Math.round(meters.toFloat()).toString()
} else {
disUnit = "公里"
remainDis = NumberFormatUtil.formatLong(meters.toDouble() / 1000)
}
}
// 剩余时间
val time = Math.ceil(timeInSecond.toDouble() / 60f).toInt()
val beforeTime = Calendar.getInstance()
beforeTime.add(Calendar.MINUTE, time)
//到达时间
val arriveTime = DateTimeUtil.formatCalendarToString(beforeTime, DateTimeUtil.TAXI_HH_mm)
FloatingDistanceInfoUtils.setDistance(meters,remainDis,disUnit,time,arriveTime)
}else{
FloatingDistanceInfoUtils.setSpeed(speed)
}
}
override fun postEvent(type: Int) {
when (type) {
VideoActivity.EVENT_FINISH -> {
EventBus.getDefault().post(FinishActivity())
}
else -> {}
}
}
}
}

View File

@@ -227,6 +227,22 @@ object FloatingDistanceInfoUtils {
if(processView!=null){
processView = null
}
actvDistancew?.let {
actvDistancew = null
}
actvDistancewUnit?.let {
actvDistancewUnit = null
}
actvSurplusTime?.let {
actvSurplusTime = null
}
actvArrivedTime?.let {
actvArrivedTime = null
}
actvSpeed?.let {
actvSpeed = null
}
isShowing = false
} catch (e: Exception) {
e.printStackTrace()

View File

@@ -77,46 +77,6 @@ class VideoActivity : AppCompatActivity() {
private var videotype = VIDEOTYPE_CONSULT
val callBack = object : ICallback.Stub() {
override fun onResult(meters :Long, timeInSecond:Long,speed:Float) {
if(speed<0){
// 距离单位
var disUnit = "公里"
// 距离
var remainDis: String? = "0"
if (meters > 0) {
if (meters / 1000 < 1) {
disUnit = ""
remainDis = Math.round(meters.toFloat()).toString()
} else {
disUnit = "公里"
remainDis = NumberFormatUtil.formatLong(meters.toDouble() / 1000)
}
}
// 剩余时间
val time = Math.ceil(timeInSecond.toDouble() / 60f).toInt()
val beforeTime = Calendar.getInstance()
beforeTime.add(Calendar.MINUTE, time)
//到达时间
val arriveTime = DateTimeUtil.formatCalendarToString(beforeTime, DateTimeUtil.TAXI_HH_mm)
FloatingDistanceInfoUtils.setDistance(meters,remainDis,disUnit,time,arriveTime)
}else{
FloatingDistanceInfoUtils.setSpeed(speed)
}
}
override fun postEvent(type: Int) {
when (type) {
EVENT_FINISH -> {
finish()
}
else -> {}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
@@ -150,7 +110,7 @@ class VideoActivity : AppCompatActivity() {
}
initListener()
initData()
LeftMenuOpen.registerCallback(callBack)
LeftMenuOpen.registerCallback(LeftMenuOpen.callBack)
}
private fun initConsultData(){
@@ -409,7 +369,7 @@ class VideoActivity : AppCompatActivity() {
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "onDestroy()")
super.onDestroy()
EventBus.getDefault().unregister(this)
LeftMenuOpen.unregisterCallback(callBack)
LeftMenuOpen.unregisterCallback(LeftMenuOpen.callBack)
releaseOnNewInstance()
OverlayLeftViewUtils.dismissOverlayView(false)
FloatingDistanceInfoUtils.dismissOverlayView()