有三种情况:如果直接使用服务,则没有必要进行绑定,但是如果要使用服务里面的方法,则要进行绑定。具体的启动情况有下:

其中很重要一点: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的更多相关文章

  1. 客户端访问AIDLService(远程绑定Service)

    import android.os.Bundle;import android.os.IBinder;import android.os.RemoteException;import android. ...

  2. 深入理解Bindler

    Binder模型

  3. 【转】 71道经典Android面试题和答案,重要知识点都包含了

    ,,面试题1.        下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存  B.内存回收程序负责释放无用内存   C.内存回收程序允许程序员直接释放内存 ...

  4. Android开发学习清单

    目录: 第1章 Android应用与开发环境1.1 Android的发展和历史1.1.1 Android的发展和简介1.1.2 Android平台架构及特性1.2 搭建Android开发环境1.2.1 ...

  5. Android面试总结 (转)

    1. 下列哪些语句关于内存回收的说明是正确的? (b) A. 程序员必须创建一个线程来释放内存 B. 内存回收程序负责释放无用内存 C. 内存回收程序允许程序员直接释放内存 D. 内存回收程序可以在指 ...

  6. Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- AIDL

    服务端: 最终项目结构: 这个项目中,我们将用到自定义类CustomData作为服务端与客户端传递的数据. Step 1:创建CustomData类 package com.ldb.android.e ...

  7. Android跨进程通信的四种方式

    由于android系统中应用程序之间不能共享内存.因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些.在android SDK中提供了4种用于跨进程通讯的方式.这4种方式正好对应于andro ...

  8. Android 四大组件之二(Service)

    service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务 ...

  9. Android 学习笔记 Service服务与远程通信...(AIDL)

    PS:这一章节看的我有几分迷茫,不是很容易理解...不过还好总算是明白了一大半了...基本的迷惑是解决了... 学习内容: 1.跨应用启动服务... 2.跨应用绑定服务... 3.跨应用实现通信... ...

随机推荐

  1. Scipy优化算法--scipy.optimize.fmin_tnc()/minimize()

    scipy中的optimize子包中提供了常用的最优化算法函数实现,我们可以直接调用这些函数完成我们的优化问题. scipy.optimize包提供了几种常用的优化算法. 该模块包含以下几个方面 使用 ...

  2. Mac下Rblas配置

    Mac 下加速 R做矩阵计算, 感觉比没有R open 快, 但数量级上差不多了. 安装R open时,提示 X11相关的组件缺失,不想再额外安装,怕污染系统文件. cd /Library/Frame ...

  3. pyCharm专业版最新2018激活码激活

    说明:本人亲测有用,对Window.Linux.Mac都稳定有效. 缺点:需要修改hosts文件 步骤: 由于管理权限问题,大部分电脑都不能直接修改hosts文件,所以我们可以先将hosts文件复制到 ...

  4. Review For Exam

    Review For Exam [2019 福建省赛] 一个很简单的状态压缩DP,结果集体走偏 如何解决连续几日的限制问题?这种东西普通的DP很难写 #include <bits/stdc++. ...

  5. StartDT AI Lab | 视觉智能引擎之算法模型加速

    通过StartDT AI Lab专栏之前多篇文章叙述,相信大家已经对计算机视觉技术及人工智能算法在奇点云AIOT战略中的支撑作用有了很好的理解.同样,这种业务牵引,技术覆盖的模式也收获了市场的良好反响 ...

  6. Winform下编译Dev控件时提示license.licx文件错误

    有时候,用vs2005或2008,用到第3方控件的时候会自动生成licenses.licx.我用的是devexpress.在程序运行的时候总是出现dev的画面,很烦.在网上找了找,找到去掉画面的方法: ...

  7. 被这个C程序折腾死了

    The C programming language 的第13页,1.5.3 行计数的那里,那个统计换行符个数的程序我好像无法运行,无论输入什么,按多少下enter,什么都出不来. #include& ...

  8. Django学习之视图层

    视图层 小白必会三板斧 HttpResponse render redirect django视图函数必须要给返回一个HttpResponse对象(render和redirect内部返回的也是一个Ht ...

  9. MRP执行计划列表(禁用)

    1.最直接的方法,推进方法 2.比较麻烦的方法

  10. 以elasticsearch-hadoop 向elasticsearch 导数,丢失数据的问题排查

    实际这是很久之前的问题了,当时没时间记录 这里简单回顾 项目基于 数据架构不方便说太细,最精简的 somedata-> [kafka]->spark-stream->elastics ...