Stop service in an activity

六眼飞鱼酱① 提交于 2019-12-01 22:59:27

This code would work

public class UsageRecorderService extends IntentService {

    private boolean mStop = false;

    public UsageRecorderService() {
        super("UsageRecorder");
    }

    public final Object sLock = new Object();

    public void onDestroy() {
        synchronized (sLock) {
            mStop = true;
        }
    }


    @Override
    protected void onHandleIntent(Intent intent) {
        while (true) {
            synchronized (sLock) {
                if (mStop) break;
            }
            UsageRecorder.recordUsages(this, false);
            SystemClock.sleep(10000);
        }
    }

}

You can use stopService

Intent intent = new Intent(MainActivity.this, UsageRecorderService.class);
stopService(intent);

Also I recommend to read Services guide to understand what is going there.

Activity:

sendBroadcast(new Intent(ACTION_STOP));

IntentService

public class UsageRecorderService extends IntentService {
  private static final String TAG  = "UsageRecorderService";
  String ACTION_STOP = "com.xxx.UsageRecorderService.ACTION_STOP";
  boolean stop;

  public UsageRecorderService() {
    super("UsageRecorder");
  }

  private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override public void onReceive(Context context, Intent intent) {
      if (ACTION_STOP.equals(intent.getAction())) {
        stop = true;
      }
    }
  };

  @Override public void onCreate() {
    super.onCreate();
    IntentFilter intentFilter = new IntentFilter(ACTION_STOP);
    registerReceiver(receiver, intentFilter);
  }

  @Override
  protected void onHandleIntent(Intent intent) {
    Log.i(TAG,"onHandleIntent");
    while (true && !stop) {
      Log.i(TAG,"----running----");
      //UsageRecorder.recordUsages(this, false);
      SystemClock.sleep(10000);
    }
  }

  @Override public void onDestroy() {
    super.onDestroy();
    unregisterReceiver(receiver);
  }
}

An IntentService is designed to stop itself only when all the requests present in the work queue have been handled.Android stops the service after all start requests have been handled.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!