2016-06-29 1 views
0

J'appelle service à partir de la classe d'application, Si je ferme l'application ou supprime des applications en cours d'exécution, alors le service détruira automatiquement, je n'ai pas écrit de code sur le Destroy() méthodeLe service se fermera si je ferme mon application

appeler le service est le code ici:

Intent syncIntent = new Intent(this, ScanBLE_Service.class); 
this.startService(syncIntent); 

ici est le code de classe de service

public class ScanBLE_Service extends IntentService { 


    public ScanBLE_Service() { 
    super(ScanBLE_Service.class.getName()); 
    // TODO Auto-generated constructor stub 

    mHandler = new Handler(); 

} 

@Override 
protected void onHandleIntent(Intent intent) { 
    // TODO Auto-generated method stub 
       demo(); 
}} 

    private void demo() { 

    mHandler.removeCallbacksAndMessages(null); 
    mHandler.postDelayed(new Runnable() { 
          @Override 
          public void run() { 
            Toast.makeText(getApplicationContext(), "Demoooo", Toast.LENGTH_SHORT).show(); 

        demo(); 
       } 
      }, 5000 
    ); 
} 
+0

ce qui est inattendu, car? –

+0

Ce comportement n'est pas attendu, pourriez-vous coller le code de votre service? –

+0

poster votre classe de service –

Répondre

1

Vous devez utiliser le service, pas IntentService. Étendez la classe Service et remplacez la méthode onStartCommand, puis effectuez les calculs dans cette méthode.

+0

Merci @Shayan_Aryan, j'ai prolongé le Service à la place du Service Intent. Maintenant, mon service fonctionne même si j'ai supprimé l'application de l'application en cours d'exécution. –

+0

votre bienvenue. alors marquez ma réponse comme acceptée s'il vous plaît –

0

Oui, le service sera fermé si l'application est fermée. Une situation, lorsque le service ne sera pas fermé pour avoir un écran Notification sur notifications constant. Plus here

+0

Ce n'est pas vrai. le service restera en arrière-plan –

0

Le comportement normal est que le service continuera à fonctionner même si l'application est fermée, car il est séparé de l'application et fonctionne en arrière-plan, à moins que vous appelez stopSelf() ou stopservice (x, x) il devrait continuer à courir ..

PS: il y a un autre type de service qui est IntentService (étend IntentService plutôt que service) et cela arrêtera automatiquement une fois le code dans onHandleIntent() est exécuté ..

1

Pour exécuter votre service même après la destruction de l'application, vous devez procéder comme suit.

  1. étendre votre service avec service Classs
  2. retour START_STICKY dans onStartCommand()
  3. override onTaskRemoved (voir le code exemple suivant). Classe publique MyIntentService extends Service { Timer mTimer;

    @Override 
        public void onCreate() 
        { 
         super.onCreate(); 
    
         mTimer = new Timer(); 
    
        } 
    
        @Override 
        public int onStartCommand(Intent intent, int flags, int startId) 
        { 
         mTimer.schedule(mTimerTask, 1000, 5000); 
    
         return START_STICKY; 
        } 
    
        @Nullable 
        @Override 
        public IBinder onBind(Intent intent) 
        { 
         return null; 
        } 
    
    
        TimerTask mTimerTask = new TimerTask() 
        { 
         @Override 
         public void run() 
         { 
          System.out.println("timer task run"); 
    
         } 
        }; 
    
    
        @Override 
        public void onTaskRemoved(Intent rootIntent) 
        { 
         System.out.println("onTaskRemoved"); 
    
         Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass()); 
         restartServiceIntent.setPackage(getPackageName()); 
    
         PendingIntent restartServicePendingIntent = PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT); 
         AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
         alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, restartServicePendingIntent); 
    
         super.onTaskRemoved(rootIntent); 
        } 
    
    }