startService,bindServie混用之onDestroy不被调用的处理方法
来源:互联网 发布:委托软件开发合同 编辑:程序博客网 时间:2024/04/29 11:35
Android后台服务保活:
本来单独使用startService启动的service,在“正在运行”的服务里面点击“停止”按钮之后,服务会调用onDestroy,然后在这个调用里面发送intent重启服务,
但是,我这里的使用场合是,在“正在运行”的服务里面点击“停止”按钮之后,需要触发onDestroy。
在同时用startService和bindservice的情况下修改bindservice的第三个参数。发现只要不是BIND_AUTO_CREATE,在“正在运行”的服务里面点击“停止”按钮之后,都会调用onDestroy。
本来单独使用startService启动的service,在“正在运行”的服务里面点击“停止”按钮之后,服务会调用onDestroy,然后在这个调用里面发送intent重启服务,
@Override public void onDestroy() { super.onDestroy(); Intent intent = new Intent(getApplicationContext(),xxx.class); startService(intent); }以上使用没有问题。但是,当加入bindService和startService混用以后,在“正在运行”的服务里面点击“停止”按钮之后,服务的onDestroy并没有被调用。造成,服务被杀死没有办法重启,而保活失败。
调用代码如下:
private void startService(int uid) { Intent intent = new Intent(this, Service.class); startService(intent); bindService();}private void bindService() { Intent intent2 = new Intent(this, Service.class); bindService(intent2, mServiceConnection, Context.BIND_AUTO_CREATE);}查找了几片博客,只是说,startService和bindService会出现这个onDestroy不被调用的情况,博客说要调用unbindservice和stopservice服务结束的时候才会调用onDestroy
但是,我这里的使用场合是,在“正在运行”的服务里面点击“停止”按钮之后,需要触发onDestroy。
在同时用startService和bindservice的情况下修改bindservice的第三个参数。发现只要不是BIND_AUTO_CREATE,在“正在运行”的服务里面点击“停止”按钮之后,都会调用onDestroy。
找到了解决方案:但是除了BIND_AUTO_CREATE还有很多选项,具体该选择哪个呢:以下列出每个选项说明:
自动创建服务只要绑定纯在。 public static final int BIND_AUTO_CREATE = 0x0001; 包含对unbind调用不匹配的调试帮助 public static final int BIND_DEBUG_UNBIND = 0x0002; 不允许此绑定将目标服务的进程提升到前台调度优先级 public static final int BIND_NOT_FOREGROUND = 0x0004; 表示绑定到此服务的客户端应用程序认为该服务比应用程序本身更重要。 当设置时,平台将尝试使内存杀手杀死应用程序,然后杀死它绑定到的服务 ,尽管这不能保证是这种情况 public static final int BIND_ABOVE_CLIENT = 0x0008; 允许承载绑定服务的进程通过其正常的内存管理。 它将更像是一个正在运行的服务, 允许系统(暂时)清除过程,如果内存低或一些其他的想法可能有, 并更积极的使它成为候选人被杀死(并重新启动)如果 运行很长时间。 public static final int BIND_ALLOW_OOM_MANAGEMENT = 0x0010; 不影响目标服务的主机进程的调度或内存管理优先级。 允许在后台LRU列表上管理服务的进程,就像在后台的常规应用程序进程一样 public static final int BIND_WAIVE_PRIORITY = 0x0020; 这个服务比客户端重要,当客户端是前台进程的时候,服务会被提到前台进程的级别。 一般一个进程只能被提高到可见进程的级别,即便客户端是个前台进程。 public static final int BIND_IMPORTANT = 0x0040; 如果是通过Activity来绑定的服务,允许服务的重要级别随着Activity是否可见而改变 public static final int BIND_ADJUST_WITH_ACTIVITY = 0x0080;
阅读全文
0 0
- startService,bindServie混用之onDestroy不被调用的处理方法
- VC : OnDestroy不被调用到的问题。
- 关于startService 与 bindservice的混用
- android 为什么不调用onDestroy方法关闭activity
- 做隐藏窗口后,OnDestroy不被调用到的问题。
- Android锁屏后主Activity的onDestroy方法被调用导致黑屏问题解决方案
- Android锁屏后主Activity的onDestroy方法被调用导致黑屏问题解决方案
- 手机转屏时,Activity的onDestroy和onCreate方法会被调用
- onStop、onDestroy的调用时机
- 关于“调用finish() 对应的activity却不调用onDestroy”的体会
- Android 防止锁屏后调用onDestroy()方法
- (待处理)startService(onStart调用)
- android之startService和bindService方法的区别
- Android锁屏后调用了ondestroy()方法,解屏后重新oncreate()的问题的解决方案。
- Android锁屏后调用了ondestroy()方法,解屏后重新oncreate()的问题的解决方案。
- Android锁屏后调用了ondestroy()方法,解屏后重新oncreate()的问题的解决方案。
- MFC中OnClose和OnDestroy的调用
- OnDestroy方法 很好用的方法
- centos7+tomcat部署JavaWeb项目详细步骤
- android一级列表购物车
- 怎么安装tomcat
- java web项目读取properties文件
- CentOS 7新装系统无网络情况
- startService,bindServie混用之onDestroy不被调用的处理方法
- SD卡数据丢失,你需要EasyRecovery!
- JavaScript函数基础练习
- GDB调试器的用法
- POI实现Excel上传及下载
- Spring Integration 系统集成
- 趣学算法系列-回溯法
- 浅谈LCD、OLED、TFT取模及其程序开发的算法取舍
- xlrd我常用的命令