gpt4 book ai didi

Android Service及其引擎

转载 作者:太空狗 更新时间:2023-10-29 14:50:42 24 4
gpt4 key购买 nike

我对使用服务有一个疑问。我有一个初始化对象的服务,将服务的实例传递给对象以便它可以用于该对象是否是一种不好的做法?一个简化的对象是:

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()
}
}

我越想越觉得这是一个更好的解决方案。你怎么看?

非常感谢您!

最佳答案

这完全没有意义。如果您需要将回调传递给 dao(websocket Controller ),我建议您使用接口(interface)。问题是你应该使用你的服务来实现你的 websocket Controller 。 请添加 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)
}
}

关于Android Service及其引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35633142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com