Android:服务在Activityclosures时停止

如果我理解正确,bindService()与BIND_AUTO_CREATE将启动一个服务,并不会死,直到所有绑定全部解除绑定。

但是,如果我bindService(BIND_AUTO_CREATE)在onCreate()和回击buttonclosures活动,服务调用onDestroy()并死也。

我不会在任何时候调用unbind()。 那么当Activity被破坏时,绑定是否被破坏,服务被破坏呢?

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

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

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

Solutions Collecting From Web of "Android:服务在Activityclosures时停止"

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

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

我find了解决scheme!

问题是,当你closures你的活动,你的服务没有configuration为前台服务时,android系统会将其识别为未使用并closures它。

这里是我添加通知的一个例子:

 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); } 

(前台服务是用户正在做的事情(如播放音乐)的服务,必须作为通知出现在用户面前,这就是为什么我们在这里创build通知)

你可以用BroadcastReceivers来做。 你会发现很多谷歌如何使用它们