在一个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?
答案 0 :(得分:3)
所以,正如我在上面的编辑中写的那样:
我刚看过这个:What exactly does onDestroy() destroy?
这意味着onDestroy并没有真正破坏任何东西。正确?它相当蹩脚,非常烦人。这是一个很受欢迎的线索,我在2年前创建了almsot,我猜这个问题我猜...:Quitting an application - is that frowned upon?
然而,我解决了我的问题,当然每个人都会说“noooo!”至。但是,它很好用。我只是将System.exit(0)放在Service中的onDestroy方法中。没有更多的挥之不去的变量=)