我对使用服务有一点怀疑。我有一个初始化对象的服务,将服务实例传递给对象是不是一种不好的做法,因此它可以用于该对象?简化的对象是:
public class MyService extends Service {
MyObject myObject = new MyObject(this);
...
}
public MyObject {
private MyService myService;
public MyObject(MyService myService) {
this.myService = myService;
}
...
private void exampleMethod() {
myService.method();
}
}
你怎么看?这是一种不好的做法吗?如何在不传递服务实例的情况下解决该问题?
事实是我想将代码拆分为两个类,因为功能不同,websocket是从服务类连接的,但是通过websocket解析/发送事件的方法是在第二个类中。我想这样做是为了避免让一个类有2000行代码,并按功能分割代码。该服务处理websocket连接,而另一个类处理其他功能。由于一切都是异步的,因此第二类需要服务类的实例。例如:如果收到并解析了错误(在第二个类上),则第二个类必须调用服务类来更新其状态并重新连接。
编辑: 我正在考虑实施以下解决方案:
public class MyService extends Service {
MyObject myObject = new MyObject() {
protected void onSuccess() {
...
}
};
...
}
public abstract class MyObject {
public MyObject() {
}
protected abstract void onSuccess();
...
private void exampleMethod() {
...
onSuccess()
}
}
我想的越多,我认为它就是更好的解决方案。你觉得怎么样?
非常感谢你!
答案 0 :(得分:0)
这完全没有意义。如果你需要将回调传递给dao(websocket控制器),我建议你使用一个接口。问题是您应该使用您的服务来实现您的websocket控制器。 请添加websocket代码,以便我们建议更多更改。
编辑:
public interface onGetData {
public void onSuccess(Object response) // here you pass the obj type you need in your service
public void onError(Object error) // same, but if things fail
}
public class MyService extends Service implements onGetData {
@Override
public void OnCreate() {
MyObject myObject = new MyObject(this);
}
@Override
public void onSuccess(Object response) {
}
@Override
public void onError(Object error) {
}
}
public MyObject {
private OnGetData onGetData ;
public MyObject(OnGetData onGetData) {
this.onGetData = onGetData;
}
private void onRequestSuccess(Object response) {
onGetData.onSuccess(response)
}
private void onRequestError(Object error) {
onGetData.onError(error)
}
}