我對使用服務有疑問。我有一個服務來初始化一個對象,將服務的一個實例傳遞給該對象是一種不好的做法,所以它可以用於該對象?一個簡化的對象應該是:Android服務及其引擎
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()
}
}
我越去想它,更好的解決方案,我認爲它是。你怎麼看?
非常感謝您提前!
您可以考慮存儲服務的WeakReference的在你的對象 – malrok44
對象居住在某一個生活圈。我想這是活動。你的對象不能啓動或停止你參考活動。你爲什麼這麼做?我看到你執行什麼方法服務? –
謝謝你的回答。該對象不是一個活動,是一個連接到websocket的引擎,所以當我從該套接字獲取響應(在MyObject中)時,我必須通知服務這些變化。但是,由於這不是活動/片段,因此我無法綁定到該服務。 – FVod