我在服务中使用了一个广播接收器,它只是将停止布尔值设置为真。例子:
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 错误。