为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Android Java中为多个活动提供生命周期事件和事件总线支持?

如何在Android Java中为多个活动提供生命周期事件和事件总线支持?

不负相思意 2022-09-28 14:57:27
我有两个活动,然后都从基本活动扩展。即CarActivity{}GasCarActivity extends CarActivity{  function onCreate(){     registerGasEvent() // so that onLowGasEvent() will work  }  function checkGas(){}  @Subscribe(threadMode = ThreadMode.MAIN)  function onLowGasEvent(){  }}ElectricCarActivity extends CarActivity{  function checkBattery(){}  @Subscribe(threadMode = ThreadMode.MAIN)  function onLowBatteryEvent(){  }}现在,我需要一个混合汽车活动,它同时使用气体汽车活动和电动汽车功能以及生命周期事件。我还在使用事件总线库,如何在混合汽车活动中同时使用“低能耗”和“低节”事件的“订阅”功能?我能在这里做什么?
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

Java不支持实现的多重继承,但它支持接口的多重继承。因此,您可以根据需要实现任意数量的接口。若要避免重复并在多个类之间共享代码,可以使用委托。


例如:


接口:

interface IGas {

  checkGas();

  onLowGasEvent();

}


interface IBattery

  checkBattery();

  onLowBatteryEvent();

}

通用功能的实现

class GasImpl implements IGas {

  checkGas() {

  ...

  }

  onLowGasEvent() {

  ...

  }

}


class BatteryImpl implements IBattery {

  checkBattery() {

  ...

  }

  onLowBatteryEvent() {

  ...

  }

}

活动(注意实施设置):

class GasCar extends Car implements IGas {

  IGas mGasImpl = new GasImpl();   // create it in your own code, or inject to inverse dependencies, etc.


  checkGas() {

    mGasImpl.checkGas();

  }


  onLowGasEvent() {

    mGasImpl.onLowGasEvent();

  }

}


class BatteryCar extends Car implements IBattery {

  IBattery mBatteryImpl;   


  checkBattery() {

    mBatteryImpl.checkGas();

  }


  onLowBatteryEvent() {

    mBatteryImpl.onLowBatteryEvent();

  }

}

然后你的将是这样的:HybridCar

class HybridCar extends Car implements IGas {

  IGas mGasImpl;

  IBattery mBatteryImpl;   


  checkGas() {

    mGasImpl.checkGas();

  }

  checkBattery() {

    mBatteryImpl.checkBattery();

  }

}

如果要使用 ,则应将订阅者保留为 Activity 接口 , 但也要将其实现委托给处理程序。因此,在:EventBusHybridActivity

  @Subscribe(threadMode = ThreadMode.MAIN)

  function onLowGasEvent(){

     mGasImpl.onLowGasEvent();

  }


  @Subscribe(threadMode = ThreadMode.MAIN)

  function onLowBatteryEvent(){

    mBatteryImpl.onLowBatteryEvent();

  }

如果需要,请更新接口方法以将其作为参数传递。onLow...EventContext


希望它有所帮助。


查看完整回答
反对 回复 2022-09-28
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

Java 没有多重继承。您必须使 Car 对象具有要使用的共享方法。


查看完整回答
反对 回复 2022-09-28
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

正如惠什@Kristy所建议的那样,Java不允许多重继承...但是有接口!

只需执行如下操作:

-创建两个界面:一个用于汽油车,另一个用于电动汽车。

-您的混合动力汽车实现了这两个接口,因此您拥有了所需的两个功能。

-您的旧车类根据其类型实现正确的接口。

希望这有帮助或给你一些提示。

干杯


查看完整回答
反对 回复 2022-09-28
  • 3 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信