我寫了一個android程序:有一個UI的主要活動,它啓動一個服務。該服務及時回調UI活動以更新視圖。它工作正常,除非:如果活動已關閉(使用BACK)並重新開始,服務也將重新啓動(服務播放音頻文件,因此有兩個重疊的聲音)。 我使用bindService和BIND_AUTO_CREATE標誌來啓動並連接到服務。根據該文件,它應該只在不存在的情況下創建服務,但顯然它會在第二次打開時啓動另一個實例。 我想要的只是當活動關閉時,服務繼續運行,當活動再次打開時,它可以重新連接到服務。那可能嗎?或者我誤解了服務的用法?爲什麼遠程服務在主要活動關閉時被破壞?
試過更多: 在bindService Intent中使用ICountService(在.aidl中描述)而不是CountService。當活動關閉時,onDestroyed被調用。
下面是服務創建代碼,如果有幫助。
ServiceConnection conn = new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName c, IBinder b) {
Log.d("TK","Connected");
//binder = (ICountService.Stub) b;
service = ICountService.Stub.asInterface(b);
try {
service.setCallback(new ICountCallback.Stub(){
@Override
public void alert() {
Log.d("TK","alert!");
}
@Override
public void updateTime(final int sec) {
handler.post(new Runnable(){
@Override
public void run() {
indicator.setText(toText(sec));
}
});
}
});
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName c) {
Log.d("TK","Disconnected");
}
};
private void startCountService(){
Intent i = new Intent(ICountService.class.getName());
boolean ok = context.bindService(i, conn, Context.BIND_AUTO_CREATE);
Log.d("TK", "bindService="+ok);
}
感謝。啓動/停止服務不起作用。我嘗試了更多,並發現當活動關閉時調用服務(CountService.onDestroy被調用)。現在的問題是:如何防止服務被破壞? – Reno 2010-11-20 08:19:11
@Reno:使用'startService()'。相信與否,它確實有效。 – CommonsWare 2010-11-20 13:14:21
謝謝。它終於開始工作了。現在我使用像這樣:當啓動活動,1)startService,2)bindService沒有BIND_AUTO_CREATE;當停止活動,只是unbindService,沒有stopService – Reno 2010-11-23 14:43:25