6

我正在使用 SDK 编写 SIP 应用程序。我的应用程序有许多活动,因此我使用服务的 onCreate 和 onDestroy 方法初始化和关闭 SDK,以便我可以在我的应用程序期间运行它(而不仅仅是单个活动)。

我正在使用的示例应用程序调用 startService,然后只是泄漏了服务 - 我不想这样做,但我不确定我是否有替代方案。

想做的是在我的 Activity 基类的 OnCreate 方法中使用 Context.BIND_AUTO_CREATE 绑定到服务,并在 OnDestroy 中取消绑定。我的所有活动都由此扩展,因此我的所有活动中都可以使用该服务。

但是,当配置更改或我切换活动时会发生什么?服务是否会在活动之间的短暂时间内被主动终止,或者是否可以保证不会?如果是前者,这不会稍微削弱服务的使用吗?我应该使用什么设计模式来使某些东西在我的应用程序的生命周期内持续存在

4

2 回答 2

3

我意识到我问错了问题。我假设应用程序将在用户完成它时被销毁,它可能不会,它只会坐在后台,我的服务也是如此。我想我需要重新设计。

此外,如果我真的想继续走这条路(我现在不想),我可以将服务绑定到我的应用程序,然后它会在应用程序的整个生命周期内存在(我记得,除非用户杀死它或Android回收它)。在这种情况下,我不需要专门调用 unbind,因为绑定将与应用程序一起被销毁。

于 2012-04-16T14:12:00.057 回答
2

在活动中,使用服务启动服务startService()并绑定到服务。如果有配置更改,这将使您的服务保持活力。

onDestroy()在您的活动中解除与服务的绑定。该服务将在您启动时仍在运行,而不仅仅是绑定到它。

在您的启动器活动中保留一个静态计数器变量。其 中的其他活动启动将其增加 1,并在其 中将其onCreate()减少 1 onDestroy()。因此,如果已打开 3 个活动并假设您将另外 2 个活动保留在后台,则静态计数器为 3。现在onDestroy()每次减少计数器并检查它是否为零,停止服务。

在我的 FirstActivity ( Launcher ) 中,我有public static int counter = 0;

然后在每个活动中:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    FirstActivity.counter++;
}

@Override
protected void onDestroy() {
    super.onDestroy();

    if (--FirstActivity.counter == 0) {
        stopService(new Intent(this, MyService.class));
    }
}
于 2012-04-16T06:13:48.623 回答