AIDLservice
有三种情况:如果直接使用服务,则没有必要进行绑定,但是如果要使用服务里面的方法,则要进行绑定。具体的启动情况有下:
其中很重要一点:bindService和unbindService是成对出现的。
1.当启动时,单独调用bindService方法,在unbindService后,会执行service的onUnbind。之后会调用onDestory
a. 首次使用bindService方法会调用service端的onCreate()->onBinder(),此时如果调用service端的方法是OK的。
I/AIDLService( ): service onCreate()...
I/AIDLService( ): ...service onBind()...
I/AIDLService( ): onServiceConnected....
b. 再次使用bindservice方法则不会重复调用,即无调用。此时如何调用service端的方法是OK的。
c. 在解绑定时候调用unbindService方法时候(或者绑定服务的activity destory后)会调用service端的onUnbind(),会调用onDestory()方法。此时服务虽然销毁了,但是仍然可以调用service端的方法。
I/AIDLService( ): unbindService
I/AIDLService( ): unbindService
I/AIDLService( ): service onUnbind()...
I/AIDLService( ): service onDestroy()...
2.当启动时,先调用startService,再调用bindService方法后,在unbindService后,会执行service的onUnbind,不会执行onDestroy方法。除非你在执行stopService.
a. 先调用startService,再调用bindService方法后会执行此调用:onCreate()->onBinder()->onStartCommand() 此时可以调用service端的方法。
startService
I/AIDLService( ): service onCreate()...
I/AIDLService( ): service onStartCommand...
bindService
1 I/AIDLService( ): ...service onBind()...
I/AIDLService( ): onServiceConnected....
b. 再次使用bindservice方法则不会重复调用,即无调用。
c. 在unbindService后,会调用onUnbind(),此时服务解绑定了,但是仍然可以调用service端的方法。
I/AIDLService( ): unbindService
I/AIDLService( ): service onUnbind()...
3. 先调用startService,在调用stopService,会执行service的onDestroy方法。
a. 先调用startService,再调用bindService方法后会执行此调用:onCreate()->onBinder()->onStartCommand() 此时可以调用service端的方法。
I/AIDLService( 1909): btn=2131230720
I/AIDLService( 2092): service onCreate()...
I/AIDLService( 2092): service onStartCommand...
I/AIDLService( 1909): btn=2131230721
I/AIDLService( 1909): btn_bindService
I/AIDLService( 2092): ...service onBind()...
I/AIDLService( 1909): onServiceConnected....
b. 再次使用bindservice方法则不会重复调用。
c. 调用stopService后,仍然可以再调用service端的方法。(但是如何调用了bindService后没有调用unbindService而直接stopservice,那么会导致service没有正常的destory)
I/AIDLService( ): btn=
I/AIDLService( ): unbindService
I/AIDLService( ): unbindService
I/AIDLService( ): service onUnbind()... I/AIDLService( ): btn=
I/AIDLService( ): btn_stopService
I/AIDLService( ): btn_stopService
I/AIDLService( ): service onDestroy()...
AIDLservice的更多相关文章
- 客户端访问AIDLService(远程绑定Service)
import android.os.Bundle;import android.os.IBinder;import android.os.RemoteException;import android. ...
- 深入理解Bindler
Binder模型
- 【转】 71道经典Android面试题和答案,重要知识点都包含了
,,面试题1. 下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 ...
- Android开发学习清单
目录: 第1章 Android应用与开发环境1.1 Android的发展和历史1.1.1 Android的发展和简介1.1.2 Android平台架构及特性1.2 搭建Android开发环境1.2.1 ...
- Android面试总结 (转)
1. 下列哪些语句关于内存回收的说明是正确的? (b) A. 程序员必须创建一个线程来释放内存 B. 内存回收程序负责释放无用内存 C. 内存回收程序允许程序员直接释放内存 D. 内存回收程序可以在指 ...
- Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- AIDL
服务端: 最终项目结构: 这个项目中,我们将用到自定义类CustomData作为服务端与客户端传递的数据. Step 1:创建CustomData类 package com.ldb.android.e ...
- Android跨进程通信的四种方式
由于android系统中应用程序之间不能共享内存.因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些.在android SDK中提供了4种用于跨进程通讯的方式.这4种方式正好对应于andro ...
- Android 四大组件之二(Service)
service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务 ...
- Android 学习笔记 Service服务与远程通信...(AIDL)
PS:这一章节看的我有几分迷茫,不是很容易理解...不过还好总算是明白了一大半了...基本的迷惑是解决了... 学习内容: 1.跨应用启动服务... 2.跨应用绑定服务... 3.跨应用实现通信... ...
随机推荐
- mysql Communications link failure Last packet sent to the server was X ms ago
想必大家在用MySQL时都会遇到连接超时的问题,如下图所示: 就是这个异常(com.mysql.jdbc.exceptions.jdbc4.Communication***ception:Commun ...
- Python——Pandas 时间序列数据处理
介绍 Pandas 是非常著名的开源数据处理库,我们可以通过它完成对数据集进行快速读取.转换.过滤.分析等一系列操作.同样,Pandas 已经被证明为是非常强大的用于处理时间序列数据的工具.本节将介绍 ...
- ZZJ_淘淘商城项目:day01(RESTful Web Service、SVN)
淘淘商城项目是很适合初级Java程序员练习的实战项目,本次复习是另一位张老师教授的课,内容上与之前入老师版taotao商城比较有些新东西加了进来. 因此有必要记录下那些直到现在还可供参考的技术亮点分享 ...
- 893B. Beautiful Divisors#美丽的因子(打表法)
题目出处:http://codeforces.com/problemset/problem/893/B 题目大意:找到一个数在二进制下,最大的以k个连续的1和k-1个连续的0组成的数字作为因子 #in ...
- dns bind记录
自建DNS服务, 使用的工具是bind, 当然也有其他更轻量的工具 yum -y install bind /etc/named.conf 监听端口和ip修改 默认监听127.0.0.1 其他机器无法 ...
- VisitsService
package me.zhengjie.monitor.domain; import lombok.Data; import org.hibernate.annotations.CreationTim ...
- linux系统用户管理(一)
Linux系统用户管理1.用户管理*****2.Linux用户命令****3.用户创建的原理***4.密码管理***5.组命令管理**6.身份切换*****7.sudo提升权限***** 我们现在所使 ...
- Caused by: java.io.FileNotFoundException: class path resource [../../resources/config/spring.xml] cannot be opened because it does not exist
在尝试使用Spring的Test的时候遇到了这个错误 原来的代码: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(loca ...
- ios 设置UITextField的placeholder大小颜色
需求:产品嫌弃placeholder的字体太大,颜色太明显,要求跟正常输入时的字体及颜色不同 方法:设置placeholder的大小和颜色,实际上是设置placeholder的label的大小和颜色, ...
- Rx系列---响应式编程
Rx是ReactiveX的简称,翻译过来就是响应式编程 首先要先理清这么一个问题:Rxjava和我们平时写的程序有什么不同.相信稍微对Rxjava有点认知的朋友都会深深感受到用这种方式写的程序和我们一 ...