Ici, j'ai essayé un programme de service simple. Le service de démarrage fonctionne correctement et génère Toast, mais pas le service d'arrêt. Le code de ce service simple est comme ci-dessous:
public class MailService extends Service {
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
public void onCreate(){
super.onCreate();
Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
}
public void onDestroyed(){
Toast.makeText(this, "Service Destroyed", Toast.LENGTH_SHORT).show();
super.onDestroy();
}
}
Le code de l'activité à partir de laquelle ce service est appelé est le suivant:
public class ServiceTest extends Activity{
private Button start,stop;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.service_test);
start=(Button)findViewById(R.id.btnStart);
stop=(Button)findViewById(R.id.btnStop);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
startService(new Intent(ServiceTest.this,MailService.class));
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
stopService(new Intent(ServiceTest.this,MailService.class));
}
});
}
}
Aidez-moi à arrêter le service avec ce bouton d’arrêt qui génère un toast dans la méthode onDestroy (). J'ai déjà vu de nombreux articles concernant le problème du service d’arrêt ici, mais pas satisfaisants, alors posant une nouvelle question. J'espère une réponse satisfaisante.
onDestroyed()
est le mauvais nom pour
onDestroy()
Avez-vous commis une erreur uniquement dans cette question ou dans votre code?
Ce code fonctionne pour moi: vérifiez ceci lien
Ceci est mon code quand j'arrête et démarre le service en activité
case R.id.buttonStart:
Log.d(TAG, "onClick: starting srvice");
startService(new Intent(this, MyService.class));
break;
case R.id.buttonStop:
Log.d(TAG, "onClick: stopping srvice");
stopService(new Intent(this, MyService.class));
break;
}
}
}
Et en classe de service:
@Override
public void onCreate() {
Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
Log.d(TAG, "onCreate");
player = MediaPlayer.create(this, R.raw.braincandy);
player.setLooping(false); // Set looping
}
@Override
public void onDestroy() {
Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
Log.d(TAG, "onDestroy");
player.stop();
}
CODAGE HEUREUX!
Pour arrêter le service , nous devons utiliser la méthode stopService()
:
Intent myService = new Intent(MainActivity.this, BackgroundSoundService.class);
//startService(myService);
stopService(myService);
alors la méthode onDestroy()
du service s'appelle:
@Override
public void onDestroy() {
Log.i(TAG, "onCreate() , service stopped...");
}
Voici un exemple complet , y compris comment arrêter le service.