-1

Pour connaître la différence entre IntentService et Service sous Android, j'ai créé le petit test ci-dessous d'une classe IntentService. La classe IntentService peut être démarrée en utilisant startService(intent);, ce qui entraînera un appel à nStartCommand (Intention intention, int flags, int startId). Également envoyer des valeurs de la classe IntentService au MainActivity pour un exemple, nous devrions l'envoyer par sendBroadcast(intent); et le MainActivity devrait enregistrer un BroadcastReceiver pour cette action afin qu'elle puisse recevoir les valeurs envoyées jusqu'à présent viadifférence entre Service et IntentService

sendBroadcast(intent); 

I ne vois pas de différence entre Service et IntentService !! Puisqu'ils sont similaires dans la façon de les lancer et dans la manière dont ils diffusent les données, pouvez-vous me dire dans quel contexte ils diffèrent?

s'il vous plaît me dire pourquoi je reçois ces erreurs et comment le résoudre

MainActivity

public class MainActivity extends AppCompatActivity { 

    private final String TAG = this.getClass().getSimpleName(); 

    private Button mbtnSend = null; 
    private int i = 0; 

    private BroadcastReceiver mBCR_VALUE_SENT = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 

      if (action.equals(MyIntentService.INTENT_ACTION)) { 
       int intnetValue = intent.getIntExtra(MyIntentService.INTENT_KEY, -1); 
       Log.i(TAG, SubTag.bullet("mBCR_VALUE_SENT", "intnetValue: " + intnetValue)); 
      } 
     } 
    }; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     registerReceiver(this.mBCR_VALUE_SENT, new IntentFilter(MyIntentService.INTENT_ACTION)); 

     this.mbtnSend = (Button) findViewById(R.id.btn_send); 
     this.mbtnSend.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(getApplicationContext(), MyIntentService.class); 
       intent.putExtra("intent_key", ++i); 
       startService(intent); 
      } 
     }); 
    } 
} 

MyIntentService:

public class MyIntentService extends IntentService { 

private final String TAG = this.getClass().getSimpleName(); 
public final static String INTENT_ACTION = "ACTION_VALUE_SENT"; 
public final static String INTENT_KEY = "INTENT_KEY"; 

public MyIntentService() { 
    super(null); 
} 

/** 
* Creates an IntentService. Invoked by your subclass's constructor. 
* 
* @param name Used to name the worker thread, important only for debugging. 
*/ 
public MyIntentService(String name) { 
    super(name); 
    setIntentRedelivery(true); 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    Log.w(TAG, SubTag.msg("onCreate")); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    Log.w(TAG, SubTag.msg("onHandleIntent")); 

    int intent_value = intent.getIntExtra("intent_key", -1); 
    Log.i(TAG, SubTag.bullet("", "intent_value: " + intent_value)); 

    Intent intent2 = new Intent(); 
    intent2.setAction(MyIntentService.INTENT_ACTION); 
    intent2.putExtra(MyIntentService.INTENT_KEY, intent_value); 
    sendBroadcast(intent2); 

    SystemClock.sleep(3000); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.w(TAG, SubTag.msg("onStartCommand")); 

    return super.onStartCommand(intent, flags, startId); 
} 
+0

La principale différence que 'Service' travaille sur le même fil où il a été appelé. Et 'IntentService' travaillant sur un thread d'arrière-plan – xAqweRx

Répondre

0

En bref, un service est un implémentation plus large pour le développeur pour mettre en place des opérations de fond, tout en Un IntentService est utile pour les opérations "fire and forget", en prenant soin de la création et du nettoyage du fond.

De la documentation:

service Un service est un composant d'application qui représente soit le désir d'une application pour effectuer une opération plus longue course sans interaction avec l'utilisateur ou de fournir des fonctionnalités d'autres applications à utiliser.

IntentService Service est une classe de base pour IntentService Services qui gère les demandes asynchrones (exprimées en tant qu'intentes) à la demande. Les clients envoient des demandes via les appels startService (Intent); le service est démarré selon les besoins, gère chaque intention à son tour à l'aide d'un thread de travail et s'arrête automatiquement lorsqu'il est à court de travail.

Conseiller cet doc - http://developer.android.com/reference/android/app/IntentService.html

0

service

Ceci est la classe de base pour tous les services. Lorsque vous étendez cette classe, il est important de créer un nouveau thread dans lequel effectuer tout le travail du service, car le service utilise par défaut le thread principal de votre application, ce qui peut ralentir les performances de toute activité exécutée par votre application.

IntentService

Ceci est une sous-classe de service qui utilise un thread de travail pour traiter toutes les demandes commencent, un à la fois. C'est la meilleure option si vous n'avez pas besoin que votre service gère plusieurs demandes simultanément. Tout ce que vous devez faire est d'implémenter onHandleIntent(), qui reçoit l'intention pour chaque demande de démarrage afin que vous puissiez faire le travail en arrière-plan. Voici quelques différences importantes entre Service et IntentService dans Android.

1) Quand utiliser?

Le service peut être utilisé dans des tâches sans interface utilisateur, mais ne doit pas être trop long. Si vous devez effectuer de longues tâches, vous devez utiliser des threads dans Service. Le service IntentService peut être utilisé dans des tâches longues, généralement sans communication avec le thread principal. Si une communication est requise, vous pouvez utiliser le gestionnaire de thread principal ou les intentions de diffusion. Un autre cas d'utilisation est lorsque des rappels sont nécessaires (tâches déclenchées par l'intention).

2) Comment déclencher?

Le service est déclenché en appelant la méthode onStartService(). Le service IntentService est déclenché à l'aide d'un Intent, il engendre un nouveau thread de travail et la méthode onHandleIntent() est appelée sur ce thread.

pour plus de clarté Envoyer cette http://www.onsandroid.com/2011/12/difference-between-android.html

+0

dans le point numéro 1, vous avez déclaré que dans le service on ne peut pas manipuler le thread UI ... est le possible dans Intentservice ?? – user2121

+0

les deux n'ont aucune communication avec l'interface utilisateur. mais si nécessaire dans le service d'intention, nous devons utiliser le gestionnaire de thread principal ou les intentions de diffusion. –

+0

Je peux voir beaucoup de similitudes dans votre réponse à [celui-ci] (https://stackoverflow.com/a/15772151/1364007). Pourriez-vous utiliser la citation en surbrillance (en commençant une ligne avec un '>') pour montrer quelles lignes sont vos mots et quelles lignes ont été copiées/collées? Cela empêchera les autres de vous accuser de plagiat. –