зупинити службу в android - -


79

Тут я спробував просту сервісну програму. Служба запуску працює нормально і генерує тост, але зупинка служби ні. Код цієї простої послуги наведений нижче:

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();
    }
}

Код Діяльності, звідки викликається ця Служба, наведений нижче:

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));
            }
        });
    }
}

Допоможіть мені зупинити службу за допомогою тієї кнопки зупинки, яка генерує тост методом onDestroy (). Я вже бачив тут багато повідомлень щодо проблеми зупинки обслуговування, але не задовільний, тому розміщення нового запитання. Сподіваюся на задовільну відповідь.


6
Хто stopService(serviceIntent)не працює?
Кріс Кешвелл,

"Також майте на увазі, що точний час знищення служби залежить від Android і може бути невідкладним". Від: stackoverflow.com/questions/2176375/android-service-wont-stop / ...
bigstones

1
@chris: Я думаю, що метод stopService (serviceIntent), як я реалізував вище, не спрацював, оскільки тост на onDestroy () не відбувся при натисканні кнопки зупинки.
Раві Бхатт,

@bigstone: чи означає це, що мій метод stopService () та onDestroy () працює правильно, але не відразу, коли я натискаю кнопку зупинки?
Раві Бхатт,

@ Раві: так. Android може вирішити, що ресурсів достатньо для збереження служби в пам’яті, щоб вона була готова, якщо вона буде потрібна знову.
bigstones

Відповіді:


49
onDestroyed()

неправильна назва

onDestroy()  

Ви помилились лише у цьому питанні чи у коді?


Так, пізніше я зробив свій код з нуля, і він працював добре. Будь-яка так може бути проблемою у моєму попередньому коді, яку я, а також я не помітив. Будь-яким чином дякую :) Так як це також допомагає іншим.
Раві Бхатт

2
@RaviBhatt То чи вдалося вам зупинити послугу? Якщо так, то можете ви поділитися, як це зробити?
сурадж


3
@suraj Якщо у вас є посилання на мій код, ніж те, що вам потрібно зробити, зробіть один намір в Activity, як intent = new Intent(ServiceTest.this,MailService.class) і використовуйте той самий намір для запуску та зупинки служби, як startService (намір) і stopService (намір).
Раві Бхатт

11
Ось чому ви завжди повинні використовувати @Overrideанотації.
Павло

16

Цей код працює для мене: перевірте це посилання
Це мій код, коли я зупиняю та запускаю службу в діяльності

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;
}
}
 }

А в класі обслуговування:

  @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();
}

ЩИРОГО КОДУВАННЯ!


як вирішити це під час винятку всередині служби? Я сумніваюся, що тоді викликається onDestory ().
Шріхарі Карант

14

Щоб зупинити службу, ми повинні використовувати метод stopService():

  Intent myService = new Intent(MainActivity.this, BackgroundSoundService.class);
  //startService(myService);
  stopService(myService);

тоді метод onDestroy()у службі називається:

  @Override
    public void onDestroy() {

        Log.i(TAG, "onCreate() , service stopped...");
    }

Ось повний приклад, зокрема, як зупинити службу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.