如何利用Android Java中的生命周期事件和事件总线支持从多个活动中恢复固有功能?
我有两个活动,它们都是从基本活动扩展而来的 i、 e 现在,我需要一个混合的CArActivity,它使用GasCarActivity和ElectricCarActivity函数以及生命周期事件 我也在使用eventbus库,如何在HybridCarActivity中同时使用onLowGasEvent和onLowBatteryEvent的订阅功能如何利用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不支持实现的多重继承,但它支持接口的多重继承。因此,您可以
我能在这里做什么?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();
}