如何利用Android Java中的生命周期事件和事件总线支持从多个活动中恢复固有功能?

如何利用Android Java中的生命周期事件和事件总线支持从多个活动中恢复固有功能?,java,android,android-activity,interface,greenrobot-eventbus,Java,Android,Android Activity,Interface,Greenrobot Eventbus,我有两个活动,它们都是从基本活动扩展而来的 i、 e 现在,我需要一个混合的CArActivity,它使用GasCarActivity和ElectricCarActivity函数以及生命周期事件 我也在使用eventbus库,如何在HybridCarActivity中同时使用onLowGasEvent和onLowBatteryEvent的订阅功能 我能在这里做什么?Java没有多重继承。您必须使Car对象具有您想要使用的共享方法 Java不支持实现的多重继承,但它支持接口的多重继承。因此,您可以

我有两个活动,它们都是从基本活动扩展而来的

i、 e

现在,我需要一个混合的CArActivity,它使用GasCarActivity和ElectricCarActivity函数以及生命周期事件

我也在使用eventbus库,如何在HybridCarActivity中同时使用onLowGasEvent和onLowBatteryEvent的订阅功能


我能在这里做什么?

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

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

例如:

  • 接口:
  • 通用功能的实现
  • 活动(注意实施设置):
  • 然后你的
    混合动力车将是这样的:
  • 如果您想使用
    EventBus
    ,您应该将订阅者作为一个活动接口,但也应该将其实现委托给处理程序。因此,在
    杂交活动中
  • 如果
    onLow…Event
    需要
    Context
    ,请更新接口方法以将其作为参数传递


    希望能有所帮助。

    正如@Kristy Whesh所建议的,Java不允许多重继承……但是有接口

    就这样做吧:

    -创建两个接口:一个用于汽油车,另一个用于电动汽车

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

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

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


    干杯

    因为活动是特殊的,它伴随着活动生命周期事件而来。“那么,在这种情况下,我们该怎么做呢?”科丁特,我不确定我是否完全理解你的问题。你能提供一些例子吗?我更新了问题,我想这有更多的信息question@CodingTT,谢谢,现在清楚多了。我在
    EventBus
    方面的经验非常少,但我认为,建议的方法仍然是可行的。请查看更新的答案
    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(){
    
      }
    }
    
    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();
      }
    }
    
    class HybridCar extends Car implements IGas {
      IGas mGasImpl;
      IBattery mBatteryImpl;   
    
      checkGas() {
        mGasImpl.checkGas();
      }
      checkBattery() {
        mBatteryImpl.checkBattery();
      }
    }
    
      @Subscribe(threadMode = ThreadMode.MAIN)
      function onLowGasEvent(){
         mGasImpl.onLowGasEvent();
      }
    
      @Subscribe(threadMode = ThreadMode.MAIN)
      function onLowBatteryEvent(){
        mBatteryImpl.onLowBatteryEvent();
      }