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

jcl*_*ova 8 service android bind

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

但是如果我在onCreate()上绑定Service(BIND_AUTO_CREATE)并按回按钮来关闭活动,那么服务也会调用onDestroy()并死掉.

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

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

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

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

Ran*_*ku' 9

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

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

  • 如何通过我的活动与服务进行通信?说,我想在完成一些工作后从服务向活动发送通知.该服务定期执行一些工作. (2认同)

小智 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);

}
Run Code Online (Sandbox Code Playgroud)

(前台服务是一种服务,它正在做一些用户积极了解的事情(例如播放音乐),并且必须作为通知出现给用户.这就是我们在这里创建通知的原因)