问题描述
我有许多活动(例如活动A , B , C ),它们为结果( startActivityForResult(..)
)调用单个活动(例如活动D )。
但是要在被叫方设置结果并完成之前根据被叫方活动(活动D )中的主叫方活动来执行某些操作。
我要完成的任务需要使用调用活动的数据变量 ,因此现在我计划传递类似于以下的回调类:
public interface myCallBack implements Seriabizable{
public void myMethod();
}
在启动活动时从每个呼叫者到被呼叫者;
intent.putExtra(CALL_BACK_OBJECT_KEY, new myCallBack(){
@Override
public void myMethod(){
//code that uses instance variables of caller class
}
});
当然,回调是可序列化的。
myCallback = getIntent().getSerializableExtra(CALL_BACK_OBJECT_KEY);
现在,被调用方活动(活动D )将执行以下任务:
myCallback.myMethod();
但这是正确的做法吗? 在活动之间传递回调类是否很好? 还有哪些其他选项?
还是有一种方法可以直接调用调用者活动的方法?
在这种情况下,我将强制调用者活动实现MyCallBack
接口。
注意:
我不想将需要的数据从调用者传递到被调用者的原因是,对于每个调用者活动,任务所需的数据是完全不同的,而且时间还很长。
因此,我不会用这些数据变量弄乱被调用者的活动。
1楼
您的建议可能有效。 但是,它看起来很复杂,不是一个好习惯。
如果您只是想传递数据跨活动,为什么不将intent.putExtra
与要传递数据的活动一起使用?
如果您要传递的数据太大或太复杂而无法像这样传递,也许您应该以另一种方式实现应用程序。
例如,您可以使用Service
。
您将拥有三项服务(每个活动或用例一个)。
这些服务将实现同一类的通用接口或继承。
您的呼叫活动(A,B或C)将启动适当的服务,并且该服务将存储数据。
当您启动活动D时,该活动将与服务绑定。
然后,她将能够完全访问服务中的所有数据或对象。