Hier habe ich einfaches Serviceprogramm ausprobiert. Dienst starten funktioniert einwandfrei und generiert Toast, Dienst beenden jedoch nicht. Der Code dieses einfachen Dienstes lautet wie folgt:
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();
}
}
Der Code der Aktivität, von der aus dieser Service aufgerufen wird, lautet wie folgt:
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));
}
});
}
}
Hilf mir, den Dienst mit dieser Stopptaste zu beenden, die Toast mit der Methode onDestroy () generiert. Ich habe hier schon viele Posts zu Stop-Service-Problemen gesehen, aber nicht zufriedenstellend, so dass ich eine neue Frage stelle. Hoffe auf eine zufriedenstellende Antwort.
onDestroyed()
ist falscher Name für
onDestroy()
Haben Sie nur in dieser Frage oder auch in Ihrem Code einen Fehler gemacht?
Dieser Code funktioniert für mich: Überprüfen Sie diese Link
Dies ist mein Code, wenn ich den Dienst in der Aktivität stoppe und starte
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;
}
}
}
Und in der Serviceklasse:
@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();
}
GLÜCKLICHE CODIERUNG!
Um den Dienst zu stoppen müssen wir die Methode stopService()
verwenden:
Intent myService = new Intent(MainActivity.this, BackgroundSoundService.class);
//startService(myService);
stopService(myService);
dann wird die Methode onDestroy()
im Dienst aufgerufen:
@Override
public void onDestroy() {
Log.i(TAG, "onCreate() , service stopped...");
}
Hier ist ein vollständiges Beispiel einschließlich der Vorgehensweise zum Beenden des Dienstes.