여러 활동에서 사용/바인딩되고있는 서비스가 있습니다. 하나의 활동이 onPause/onResume에서 다른 바인딩보다 먼저 바인딩 해제되도록 신중하게 작성했습니다. 그러나, 나는 달라 붙지 않는 서비스의 구성원 ....Android 서비스가 싱글 톤으로 작동하지 않습니다.
활동 1주의 :
private void bindService() {
// Bind to QueueService
Intent queueIntent = new Intent(this, QueueService.class);
bindService(queueIntent, mConnection, Context.BIND_AUTO_CREATE);
}
...
bindService();
...
mService.addItems(downloads); // the initial test adds 16 of them
활동을 2 :
bindService(); // a different one than activity 1
int dlSize = mService.getQueue().size(); // always returns 0 (wrong)
서비스의 코드 :
public class QueueService extends Service {
private ArrayList<DownloadItem> downloadItems = new ArrayList<DownloadItem();
// omitted binders, constructor, etc
public ArrayList<DownloadItem> addItems(ArrayList<DownloadItem> itemsToAdd) {
downloadItems.addAll(itemsToAdd);
return downloadItems;
}
public ArrayList<DownloadItem> getQueue() {
return downloadItems;
}
}
한 가지를 변경하면 서비스의 downloadItems 변수가 정적 변수가됩니다. 모든 것이 완벽하게 작동합니다. 그러나 그것을해야하는 것은 나를 걱정한다. 전에 이런 식으로 싱글 톤을 사용한 적이 없습니다. 이것들 중 하나를 사용하는 올바른 방법입니까?
액티비티의 어느 곳에서나 startService()를 호출합니까? 이것은 서비스가 싱글 톤으로 살아남을 수있게합니다. 그렇지 않으면 바인딩 된 활동이 파손될 때 파기됩니다. – Nospherus
@Nospherus 곧 내가 한 일을 tl; dr은 "bindService"는 "startService()"와 마찬가지로 작동합니까? –
아니요. startService()와 bindService()를 호출해야합니다. bindService() 만 호출하면 서비스를 바인딩 해제하는 즉시 서비스가 종료됩니다. startService()를 호출하면 서비스 내에서 stopService() (또는 stopSelf())를 호출 할 때까지 활성 상태를 유지합니다. @Nospherus 감사합니다; – Nospherus