Когда я вызываю stopService (намерение)

С точки зрения жизненного цикла, когда я вызываю stopService(intent), сразу ли вызывается служба onDestroy()? Я спрашиваю, потому что у меня проблема с вызовом onDestroy() для уничтожения этого потока, который генерирует служба.

Заранее спасибо!

button.setOnClickListener(new OnClickListener(){
        public void onClick(View v){

            Log.d(Tag, "in button's onClick");


            Log.d(Tag, field.getText().toString());
            String busNo = field.getText().toString();
            field.setText("");
            field.setAdapter(clearAdapter);
            String url = makeURL(busNo);
            Log.d(Tag, "after makeURL(), url is now "+url);
            Intent intent = new Intent(JSoupTest9Activity.this, ServiceTest.class);
            Log.d(Tag, "intent created...");
            intent.putExtra("URL", url);
            Log.d(Tag, "intent's extra put");
            Log.d(Tag, "stopping intent service");
            stopService(intent);
            Log.d(Tag, "starting intent service");

            startService(intent);
            Log.d(Tag, "service started");

            //pendingIntent = PendingIntent.getService(JSoupTest8Activity.this, 0, intent,  0);
            //alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 30*1000, pendingIntent);

        }
    });

Как видите, я вызвал stopService(), чтобы убить все предыдущие службы (потоки запросов) и запустить новую службу (новый поток запросов).


person Jason Ching    schedule 22.08.2012    source источник
comment
Ваш сервис генерирует другой поток?   -  person Shachillies    schedule 22.08.2012
comment
загрузите свой код, пожалуйста   -  person Lucifer    schedule 22.08.2012
comment
да. onDestroy() вызывается при выполнении stopService()   -  person AndroidGuy    schedule 22.08.2012


Ответы (1)


Он не будет вызываться сразу только статическим вызовом stopService. Как указано на диаграмме жизненного цикла действия, оно будет уничтожено, если вм нужны ресурсы

Когда я сомневаюсь, я просто использую инструмент журнала и проверяю их вывод на LogCat. Если вы переопределите метод OnDestroy следующим образом:

protected void onDestroy() {
Log.d("event","onDestroy was Called!");
super.onDestroy();
}

Вы можете проверить себя, когда он был вызван.

И если вы хотите уничтожить одно из своих действий в фоновом режиме, вы можете использовать диспетчер действий:

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses("<packagename>");

Если это не в вашем приложении, вам, конечно, нужно установить разрешения на манифест. С моим ограниченным опытом я не нашел времени, когда мне нужно было уничтожить какой-либо процесс; но я нашел много документации, говорящей мне не делать этого, например,

Проверяя дальше, я думаю, что этот вопрос уже был рассмотрен

person quinestor    schedule 22.08.2012