Почему переменные в Сервисе не «сбрасываются» после остановки Сервиса (его onDestroy был выполнен)? - PullRequest
3 голосов
/ 13 октября 2011

В одном действии я определяю следующий слушатель кнопок:

final Button button = (Button) findViewById(R.id.buttonExit);
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        stopService(new Intent(StartupActivity.this, SamcomService.class));
        finish();
    }
});

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

Когда я нажимаю кнопку, Service.onDestroy выполняется так, как ожидалось. В onDestroy я делаю уборку, а затем, наконец, вызываю super.onDestroy () :

 @Override
 public void onDestroy() {   // the service onDestroy

     // Do some cleaning

     NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
     mNotificationManager.cancel(1);

     // more cleaning
     Toast.makeText(this, "The service has been stopped! Wii!", Toast.LENGTH_LONG).show();
      super.onDestroy();
 }

Я мой мир, это значит, что эта Служба мертва и похоронена вместе со всеми переменными в ней. Правильно? Ну, это не похоже на это.

Смысл в том, что в моей службе есть строка, к которой я добавляю текст, прежде чем нажать кнопку, чтобы остановить службу. Примерно так:

public class SamcomService extends Service {

    private String startupText = "";

    private void addTextToStartup(String text)
    {
        startupText += text;

        // Sending a broadcast, not relevant
        // ...
    }

    // ...
}

Эта строка, startupText , не сбрасывается при следующем запуске приложения! Как будто Служба вообще не была убита. StartText содержит весь текст, который был добавлен в него при предыдущем запуске.

Почему это? Что мне не хватает? Служба не мертва? Когда я снова запускаю приложение, вызывается метод Service onCreate, подразумевая, что оно запускается с нуля ...

--- РЕДАКТИРОВАТЬ ---

Я только что прочитал это: Что именно уничтожает onDestroy ()?

Это означает, что onDestroy действительно ничего не уничтожает. Правильный? Это довольно хромая, и очень раздражает. Одна хорошо посещенная тема здесь о SO, которую я создаю almsot 2 года назад, обсуждая эту проблему, я думаю ...: Не одобряется ли выход из приложения?

1 Ответ

3 голосов
/ 19 октября 2011

Итак, как я уже писал в своем EDIT выше:

Я только что прочитал это: Что именно уничтожает onDestroy ()?

Это означает, что onDestroy действительно ничего не разрушает.Правильный?Это довольно хромая, и очень раздражает.Одна хорошо посещаемая тема здесь о SO, которую я создаю almsot 2 года назад, обсуждая эту проблему, я думаю ...: Выход из приложения - это осуждается?

Однако я решил свойПроблема в том, что, конечно, все скажут "Нееееет!"к.Тем не менее, это работает хорошо.Я просто помещаю System.exit (0) в мой метод onDestroy в Сервисе.Больше не осталось переменных =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...