【发布时间】:2011-10-12 15:59:58
【问题描述】:
我正试图弄清楚 Android 在生命周期问题上是如何工作的。
我决定有一个长期运行的服务来保存我的 TCP 连接和其他东西。
我有一个 Activity,StartupActivity。该活动启动一个服务,然后我按下一个按钮来完成活动。然后我再次启动相同的应用程序/活动,从而再次执行 startService。
但是,我预计 Service 仍然存在(没有调用 onDestroy),但 Service 中的 onCreate 方法仍在执行中。
为什么?
第1步:执行StartupActivit中的onCreate:
@Override
protected void onCreate(android.os.Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.startup);
startService(new Intent(StartupActivity.this, SamcomService.class));
registerReceiver(connectionReceiver, new IntentFilter("STARTUP_PROGRESS_MESSAGE"));
registerReceiver(connectionReceiver, new IntentFilter("STARTUP_FINISH"));
final Button button = (Button) findViewById(R.id.buttonExit);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});
}
第 2 步:按下按钮,调用 Activity.finish()(返回主屏幕)
第 3 步:我再次启动应用程序,再次执行 Activity 的 onCreate,从而启动相同的服务
现在,当我第二次启动应用程序时,服务应该正在运行(我该如何检查?)。我没有看到调用 Service onDestroy 时显示的 Toast,我还看到了 Service 创建(并删除 onDestroy)的通知。
但是,onCreate 会再次执行。我现在是否同时运行多个服务?
【问题讨论】:
-
是的,您确实有 2 个服务正在运行。
-
嗯,我不太确定。现在坐下来测试。与本地 TCP 服务器进行 TCP 连接。最多只建立一个 TCP 连接。此外,现在似乎服务的 onCreate 没有执行两次。只有当我运行调试器时才会发生...
-
引用自here:启动服务的多个请求会导致对服务的 onStartCommand() 的多个相应调用。但是,只需要一个停止服务的请求(使用 stopSelf() 或 stopService())来停止它。 似乎只有一个 Service 实例。
-
嗯,看起来是这样......我想我在从 Eclipse 调试时感到困惑......有人可以关闭这个问题。或者 slkorolev 可以回答它,我会好的 =)