3 回答
![?](http://img1.sycdn.imooc.com/54584d080001566902200220-100-100.jpg)
TA贡献1810条经验 获得超5个赞
正如Dave已经指出的那样,你可以运行Service
前景优先级。但是这种做法只应在绝对必要时使用,即如果服务被Android杀死会导致糟糕的用户体验。这就是“前景”的真正含义:你的应用程序在某种程度上处于前台,如果它被杀死,用户会立即注意到它(例如因为它播放了一首歌或一段视频)。
在大多数情况下,请求服务的前台优先级是反效果的!
这是为什么?当Android决定杀死a时Service
,它会这样做,因为它缺少资源(通常是RAM)。基于不同的优先级类,Android决定终止哪些正在运行的进程以及这些服务,以便释放资源。这是一个您希望发生的健康过程,以便用户获得流畅的体验。如果您没有充分理由请求前台优先级,只是为了防止您的服务被杀,它很可能会导致糟糕的用户体验。或者,您能保证您的服务保持在最小的资源消耗范围内并且没有内存泄漏吗?1
Android提供了粘性服务来标记服务,如果它们被杀死,应该在一段宽限期后重新启动。这种重启通常在几秒钟内完成。
想要为Android编写XMPP客户端的图像。您是否应该为Service
包含XMPP连接的前台优先级请求?绝对没有,绝对没有理由这样做。但是您希望将其START_STICKY
用作服务onStartCommand
方法的返回标志。因此,当资源压力时,您的服务会停止,并在情况恢复正常后重新启动。
1:我很确定很多Android应用都有内存泄漏。这是休闲(桌面)程序员不关心的东西。
![?](http://img1.sycdn.imooc.com/5333a207000118af02200220-100-100.jpg)
TA贡献2021条经验 获得超8个赞
对于Android 2.0或更高版本,您可以使用该startForeground()
方法在前台启动服务。
该文件说以下:
启动的服务可以使用
startForeground(int, Notification)
API将服务置于前台状态,其中系统认为它是用户主动意识到的东西,因此在内存不足时不是候选者。(从理论上讲,服务在当前前台应用程序的极端内存压力下被杀死仍然是可能的,但实际上这不应该是一个问题。)
主要用于当杀死服务对用户造成破坏时,例如,杀死音乐播放器服务将停止音乐播放。
您需要提供一个Notification
方法,该方法显示在Ongoing部分的Notifications Bar中。
![?](http://img1.sycdn.imooc.com/54584ed2000152a202200220-100-100.jpg)
TA贡献1834条经验 获得超8个赞
当您使用BIND_AUTO_CREATE将服务绑定到Activity时,您的服务将在您的活动被销毁和解除绑定后被杀死。它不依赖于你如何实现你的服务unBind方法它仍将被杀死。
另一种方法是使用Activity中的startService方法启动服务。这样即使您的Activity被销毁,您的服务也不会被销毁甚至暂停,但您必须在适当时使用stopSelf / stopService自行暂停/销毁它。
- 3 回答
- 0 关注
- 2206 浏览
添加回答
举报