如果我理解正确, 带有BIND_AUTO_CREATE的bindService()将启动一个服务,并且在所有绑定全部解除绑定之前不会死亡。
但是如果我在onCreate()上绑定Service(BIND_AUTO_CREATE)并按回按钮来关闭 活动,服务调用onDestroy()并死亡。
我不会随时调用unbind()。 那么这意味着当Activity被破坏时,绑定也被破坏了,服务也被破坏了吗?
如果我希望服务在活动开始的同时始终运行,该怎么办? 我想绑定它以便我可以访问该服务吗?
如果我在onCreate()上调用StartService()然后调用bindService(),它将在每次启动Activity时重新启动服务。 (我不想要)。
所以我可以开始服务一次然后在下次启动活动时绑定吗?
答案 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做到这一点。你会在谷歌上找到很多如何使用它们