我在Service
中有BroadcastReceiver
。當廣播接收機在服務中註冊時無法停止服務
我註冊服務的oncreate()
方法類似接收器,
final MyReceiver myReceiver = new MyReceiver();
@Override
public void onCreate() {
IntentFilter filter = new IntentFilter(SOME_FILTER);
registerReceiver(myReceiver, filter);
}
然後我創建註銷接收器和停止服務等的方法,
public void stopService(){
if(myReceiver != null){
try{
unregisterReceiver(myReceiver);
}catch(Exception e){
e.printStackTrace();
}
}
stopSelf();
}
但不會停止的服務。有也不例外,沒有錯誤。只是服務不會停止。
我也試了一下下面的方式,
public void stopService(){
if(myReceiver != null){
try{
unregisterReceiver(myReceiver);
}catch(Exception e){
e.printStackTrace();
}
}
stopForeground(true);
stopSelf();
}
通過這種服務的通知被在前臺運行皮,但服務的onDestroy()
不會被調用。
我也試圖把代碼註銷接收機
onDestroy()
但調用stopSelf()
方法onDestroy()
永遠不會被調用後。
如果我沒有在註冊該服務的BroadcastReceiver
,一切工作完全正常,服務站和onDestroy()
被調用,但是當我註冊receiver
那麼它不會停止。
任何想法這裏發生了什麼?
編輯
這是怎麼了綁定和啓動服務
Intent serviceIntent = new Intent(MainActivity.this, MyService.class);
bindService(serviceIntent, mConnection, Context.BIND_AUTO_CREATE);
startService(serviceIntent);
這是mConnection
MyService myService;
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className, IBinder service){
LocalBinder binder = (LocalBinder) service;
myService = binder.getService();
isBound = true;
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
isBound = false;
}
};
下面是我是怎麼解除綁定服務,並停止它。
if(isBound){
unbindService(mConnection);
isBound = false;
}
myService.stopService();
myService = null;
如何啓動'Service'並在哪裏調用'stopService()'(btw不是一個好名字,因爲'ContextWrapper'中有一個類似於不同參數的方法)。另外,你是否在任何地方綁定了「服務」? –
@ci_我已將代碼添加到問題中。 – gprathour
你正在提供不完整的代碼,什麼是playerService?你爲什麼不發佈一個工作的客戶和服務代碼? – pskink