在一个活动中,我定义了以下按钮侦听器: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包含在上一次运行中添加到它的所有文本。
为什么?我错过了什么?服务不是死了吗?当我再次启动应用程序时,将调用serviceocreate方法,这意味着它是从头开始的……
---编辑---
我刚读到:
What exactly does onDestroy() destroy?
这意味着灾难不会真的摧毁任何东西。对的?它很蹩脚,而且非常烦人。在这里有一个很受欢迎的线索,所以我两年前就开始讨论这个问题了,我想……:
Is quitting an application frowned upon?
最佳答案
所以,正如我在上面的编辑中所写的:
我刚读到:What exactly does onDestroy() destroy?
这意味着灾难不会真的摧毁任何东西。对的?它很蹩脚,而且非常烦人。在这里有一个很受欢迎的帖子,所以我两年前就开始讨论这个问题了,我想……:Quitting an application - is that frowned upon?
然而,我解决了我的问题,当然每个人都会说“不!”去。不过,它工作得很好。我只是将System.Exit(0)放在服务中的ondestroy方法中。不再有延迟变量=)