jcl*_*ova 8 service android bind
如果我理解正确,bindService()和BIND_AUTO_CREATE将启动一个服务,并且在所有绑定全部解除绑定之前不会消亡.
但是如果我在onCreate()上绑定Service(BIND_AUTO_CREATE)并按回按钮来关闭活动,那么服务也会调用onDestroy()并死掉.
我不会随时调用unbind().那么这意味着当Activity被破坏时,绑定也被破坏了,服务也被破坏了吗?
如果我希望服务始终在运行,并且在活动开始的同时我想绑定它以便我可以访问该服务,该怎么办?
如果我在onCreate()上调用StartService()然后调用bindService(),它将在每次启动Activity时重新启动服务.(我不想要).
所以我可以开始服务一次,然后在下次启动活动时绑定?
您需要使用startService以便在绑定到它的活动被销毁时不停止该服务.
startService即使您的活动被销毁,也会确保服务正在运行(除非由于内存限制而停止).当您调用时startService,将onStart在服务上调用该方法.它不会重新启动(终止并重新启动)该服务.所以这取决于您如何onStart在服务上实现该方法.onCreate但是,服务只调用一次,因此您可能希望在那里初始化事物.
小智 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)
(前台服务是一种服务,它正在做一些用户积极了解的事情(例如播放音乐),并且必须作为通知出现给用户.这就是我们在这里创建通知的原因)
| 归档时间: |
|
| 查看次数: |
13215 次 |
| 最近记录: |