Android:服务在关闭活动时停止

时间:2010-11-23 00:26:04

标签: android service bind

如果我理解正确, 带有BIND_AUTO_CREATE的bindService()将启动一个服务,并且在所有绑定全部解除绑定之前不会死亡。

但是如果我在onCreate()上绑定Service(BIND_AUTO_CREATE)并按回按钮来关闭 活动,服务调用onDestroy()并死亡。

我不会随时调用unbind()。 那么这意味着当Activity被破坏时,绑定也被破坏了,服务也被破坏了吗?

如果我希望服务在活动开始的同时始终运行,该怎么办? 我想绑定它以便我可以访问该服务吗?

如果我在onCreate()上调用StartService()然后调用bindService(),它将在每次启动Activity时重新启动服务。 (我不想要)。

所以我可以开始服务一次然后在下次启动活动时绑定吗?

3 个答案:

答案 0 :(得分:9)

您需要使用startService,以便在销毁绑定到它的活动时不停止该服务。

startService将确保服务正在运行,即使您的活动被销毁(除非因为内存限制而停止)。当您致电startService时,会在服务上调用onStart方法。它不会重新启动(终止并重新启动)该服务。所以这取决于您如何在服务上实现onStart方法。但是,服务的onCreate只被调用一次,所以你可能想要在那里初始化。

答案 1 :(得分:5)

我找到了解决方案!

问题是,当您关闭活动并且您的服务未配置为前台服务时,Android系统会将其识别为未使用并关闭它。

这是我添加通知的示例:

void setUpAsForeground(String text) {
    PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0,
            new Intent(getApplicationContext(), MainActivity.class),
            PendingIntent.FLAG_UPDATE_CURRENT);
    mNotification = new Notification();
    mNotification.tickerText = text;
    mNotification.icon = R.drawable.muplayer;
    mNotification.flags |= Notification.FLAG_ONGOING_EVENT;
    mNotification.setLatestEventInfo(getApplicationContext(), "MusicPlayer",
            text, pi);
    startForeground(NOTIFICATION_ID, mNotification);

}

(前台服务是指用户主动了解某些内容的服务(例如播放音乐),并且必须作为通知显示给用户。这就是我们创建通知的原因这里)

答案 2 :(得分:-5)

你可以用BroadcastReceivers做到这一点。你会在谷歌上找到很多如何使用它们