複数のアクティビティで使用/バインドされているサービスがあります(onPause/onResume内で別のバインドが行われる前に、1つのアクティビティがバインド解除されるように注意して書きました)。しかし、私はくっつかないサービスでメンバー....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私はまもなく行ったことを追加します - dr; "bindService"は "startService()"と同様に動作しますか? –
いいえ、startService()とbindService()の両方を呼び出す必要があります。 bindService()だけを呼び出すと、バインド解除するとすぐにサービスが終了します。 startService()を呼び出すと、サービス内でstopService()(またはstopSelf())を呼び出すまで有効になります。 @Nospherusありがとうございます; – Nospherus