stopService doesn't stop's my service… why?

前端 未结 11 884
旧巷少年郎
旧巷少年郎 2020-12-03 07:02

i have a background service on my android APP that is getting my GPS position and sending it to a remote db. It work\'s fine.

The problem is when i want to stop the

11条回答
  •  再見小時候
    2020-12-03 07:26

    It's very common this situation where I need to stop my service before to finish the process. In some case is not enough with stopService(intent). You should have in mind the onDestroy() implement in my service. Example:

    public class MyIntentService extends IntentService {
    
        // Defines and instantiates an object for handling status updates.
        private BroadcastNotifier mBroadcaster = null;
        private int progress = 0; //THIS IS MY COUNTER FOR EXAMPLE!!!
    
        public MyIntentService() {
            super("MyIntentService");
        }
    
        @Override
        protected void onHandleIntent(Intent intent) {
    
            progress = 0;
            int tiempo_disponible = intent.getIntExtra("minutos_disponible", 0);
    
            if (mBroadcaster == null){
    
                mBroadcaster = new BroadcastNotifier(this);
            }
            // Broadcasts an Intent indicating that processing has started.
            mBroadcaster.broadcastIntentWithState(Constants.STATE_ACTION_STARTED);
    
            mBroadcaster.broadcastIntentWithState(Constants.STATE_ACTION_RUNNING);
    
            while (progress < tiempo_disponible) {
    
                progress++;
                try {
                    Log.i(Constants.TAG, "Procesing " + progress);
                    mBroadcaster.notifyProgress(progress);
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            // Reports that the feed retrieval is complete.
            mBroadcaster.broadcastIntentWithState(Constants.STATE_ACTION_COMPLETE);
        }
    
        @Override
        public void onDestroy() {
            progress = 1000000; // WHITH THAT YOU FINISH THE CICLE IF tiempo_disponible NEVER IS MAYOR THAT 1000000, YOU CAN USE OTHER CONDITIONAL!!!!!!
            super.onDestroy();
        }
    } 
    

    In this way, when you have stopped the service using stopService method also you will have stopped the process o counter.

    public void stopService(){
            context.stopService(intent);
            LocalBroadcastManager.getInstance(context).unregisterReceiver(responseReceiver);
            responseReceiver = null;
            intent = null;
    }
    

    Take care! @yaircarreno

提交回复
热议问题