为什么停止服务后服务中的变量没有“重置”(其onDestroy已被执行)?

时间:2011-10-12 20:18:03

标签: android service

在一个Activity中,我定义了以下Button侦听器:

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 不会重置!就像服务没有被杀死一样。 startupText包含上一次运行中添加到它的所有文本。

为什么?我错过了什么?服务不是没死?当我再次启动应用程序时,会调用Service onCreate方法,这意味着它从头开始...

---编辑---

我刚看过这个: What exactly does onDestroy() destroy?

这意味着onDestroy并没有真正破坏任何东西。正确?它相当蹩脚,非常烦人。这是我在2年前创建almsot的一个访问量很大的线程,我在讨论这个问题时我猜...: Is quitting an application frowned upon?

1 个答案:

答案 0 :(得分:3)

所以,正如我在上面的编辑中写的那样:

我刚看过这个:What exactly does onDestroy() destroy?

这意味着onDestroy并没有真正破坏任何东西。正确?它相当蹩脚,非常烦人。这是一个很受欢迎的线索,我在2年前创建了almsot,我猜这个问题我猜...:Quitting an application - is that frowned upon?

然而,我解决了我的问题,当然每个人都会说“noooo!”至。但是,它很好用。我只是将System.exit(0)放在Service中的onDestroy方法中。没有更多的挥之不去的变量=)