我在服务中使用了一个广播接收器,它只是将停止布尔值设置为真。例子:
private boolean stop=false;
public class StopReceiver extends BroadcastReceiver {
public static final String ACTION_STOP = "stop";
@Override
public void onReceive(Context context, Intent intent) {
stop = true;
}
}
@Override
protected void onHandleIntent(Intent intent) {
IntentFilter filter = new IntentFilter(StopReceiver.ACTION_STOP);
filter.addCategory(Intent.CATEGORY_DEFAULT);
StopReceiver receiver = new StopReceiver();
registerReceiver(receiver, filter);
// Do stuff ....
//In the work you are doing
if(stop==true){
unregisterReceiver(receiver);
stopSelf();
}
}
然后,从活动调用中:
//STOP SERVICE
Intent sIntent = new Intent();
sIntent.setAction(StopReceiver.ACTION_STOP);
sendBroadcast(sIntent);
停止服务。
PD:我使用布尔值,因为在我的情况下,我在循环中停止服务,但您可能可以在 onReceive 中调用 unregisterReceiver 和 stopSelf。
PD2:如果服务正常工作,不要忘记调用 unregisterReceiver,否则你会得到一个泄露的 IntentReceiver 错误。