Stop service in an activity

后端 未结 3 717
独厮守ぢ
独厮守ぢ 2021-01-23 01:25

I\'m using following code to stop my service

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

An

相关标签:
3条回答
  • 2021-01-23 01:30

    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.

    0 讨论(0)
  • 2021-01-23 01:37

    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.

    0 讨论(0)
  • 2021-01-23 01:44

    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);
      }
    }
    
    0 讨论(0)
提交回复
热议问题