Android Service 服务不被杀死的妙招
在Android应用开发中,Service是不可或缺的一部分,它用于在后台执行长时间运行的操作,例如播放音乐、后台数据同步等。然而,Android系统为了优化资源管理,可能会在内存紧张时杀死正在运行的Service。本文将深入探讨如何使Android Service在被系统杀死后能够自动重启,以保持其后台任务的持续运行。 我们要了解`onStartCommand()`方法。当Service启动时,系统会调用此方法,开发者可以在这个方法中处理Intent并返回一个int值,这个值决定了Service在被杀死后的行为: 1. `START_STICKY`:如果Service被系统杀死,系统会在内存允许时重新创建Service,但不会重新传递Intent。如果Service被杀死时没有Intent在处理,那么`onStartCommand()`中的Intent参数将会是null。 2. `START_NOT_STICKY`:如果Service被杀死,系统不会自动重启它。只有当再次通过`startService()`调用时,Service才会重新启动。 3. `START_REDELIVER_INTENT`:如果Service被杀死,系统不仅会重新创建Service,还会重新传递最后一次的Intent给`onStartCommand()`。 4. `START_STICKY_COMPATIBILITY`:这是`START_STICKY`的一个兼容版本,但不保证Service在所有情况下都能被重新启动。 创建一个不被轻易杀死的Service,我们可以采取以下策略: 1. 在`onStartCommand()`中返回`START_STICKY`或`START_STICKY_COMPATIBILITY`,这样即使Service被杀死,系统也会尝试重新创建它。例如: ```java @Override public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY_COMPATIBILITY; } ``` 2. 当Service被销毁时,通过`onDestroy()`方法手动重启Service,确保Service能够在适当的时候重新启动。例如: ```java @Override public void onDestroy() { Intent localIntent = new Intent(this, MyService.class); startService(localIntent); } ``` 3. 创建一个BroadcastReceiver,监听特定事件,如系统用户界面出现(`ACTION_USER_PRESENT`),并在接收到广播时重启Service。这样,当设备解锁时,Service可以自动恢复运行: ```java public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { context.startService(new Intent(context, MyService.class)); } } ``` 并在AndroidManifest.xml中注册这个BroadcastReceiver。 4. 在AndroidManifest.xml中为Service设置`stopWithTask`属性为`false`,使其在应用程序任务被清除时也不会停止。 5. 另外,可以考虑使用前台Service,通过显示通知来提高Service的优先级。前台Service更难被系统杀死,因为它给用户提供了可见的反馈,表明应用正在后台执行重要任务。 6. 合理使用`IntentService`,它是一个内置的单线程Service,适合执行一次性任务。尽管IntentService会在任务完成后自动停止,但如果结合上述的一些技巧,仍然可以实现类似“不被杀死”的效果。 通过组合使用这些策略,开发者可以显著提高Service在Android系统中的生存能力,确保后台任务能够在大多数情况下持续运行。但需要注意的是,过度依赖Service不被杀死可能导致系统资源浪费,影响用户体验。因此,应该谨慎使用这些技巧,并确保Service的运行对用户来说是有意义和必要的。






























- 粉丝: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- PLC的物料分拣机械手自动化控制系统设计方案.doc
- 试析企业财务管理受到的会计信息化影响及对策.docx
- 计算机科学与技术医院实习报告.docx
- 自动编程实训参考空白研究分析报告.doc
- 关于插件技术在计算机软件技术中的应用价值.docx
- 基于Android平台的大学计算机基础课程APP设计与应用.docx
- 基于P2P模式下的大学生网络借贷的风险防范研究.docx
- 电梯模型PLC控制系统设计方案与调试.doc
- 基于大数据的学生成绩影响因素分析系统.docx
- 网络环境下情报学研究的知识化.docx
- Flet框架实现的毛主席七律《长征》的诗句楼梯斜梯排列效果自定义模板
- 智能仪表的CAN接口设计.doc
- “乐佳盟智能化社区”网站设计方案.doc
- kV变电站二次网络安全设备规范书.doc
- 物联网在图书馆管理中的关键技术分析.doc
- 高一计算机期末试题.doc


