android aidl和普通service

最近看了任医生的《Android艺术开发探索》感觉收获颇丰。所以也想记录一下博客,因为写博客觉的确实是积累和总结的过程。好了,废话不多说了。

service总共分为2种,一种是普通service,就是直接继承Service的类,比较简单。主要注意的是这个类运行在主线程的,不能做耗时的工作。如果需要做耗时的工作就需要另外开启i一个线程了。

根据官方文档对service的基础方法的解释:

onStartCommand():当其他的组件调用startService()方法的时候,这个方法会调用一次,并在后台运行。如果你实现了找个方法,你有必要在这个方法完成之后调用stopSelf或者stopService(如果你仅仅想获取binding可以不必实现这个方法)。这个也是基础service进行工作的方法,把你要实现的功能写在这里。有一点要注意,当你是通过bindService开启服务的时候,这个方法是不会被调用的

onStartCommand回调方法还有一个返回值,返回值系统总共给了3个:

1、START_NOT_STICKY 这个值文档上说是系统不会轻易在你工作未完成前杀死这个服务。是一个相对安全的值。系统不会重新创建这个服务

2、START_STICKY 当我们返回这个值的时候,会重新创建这个服务,不过不会再传递intent对象了。这个比较适合多媒体播放

onBind():当其他组件想要与这个service绑定的话(例如实现远程协议调用RPC),在这个方法实现里你必须提供IBinder接口来和客户端通信。 要实现跨进程通信必须要实现的方法

onCreate():当这个服务第一次创建的时候系统回调,可以在这里做一些初始化工作

onDestroy():当服务被销毁的时候,系统回调,做一些释放内存的操作

还有一种也可以实现Service的功能,就是IntentService,这个和上面的不同之处在于,这个我们要在onHandleIntent.方法里进行操作。而且这个回调是可以进行耗时操作的。

下面说说启动服务,启动服务主要两种方式,第一种是startService,当我们启动一个实现了onStartCommand服务之后,onCreate之后调用一次,并且再次启动不会调用该方法。

				
时间: 2024-10-15 22:48:37

android aidl和普通service的相关文章

android学习之remote service 的aidl详解

写在前面的话: 关于remote service中使用aidl来实现跨进程,多线程通信,我是参考了三篇文章,大概把这个弄明白了. (1)android 官方关于aidl的说明文档 docs/guide/components/aidl.html (2)Android学习笔记23服务Service之AIDL和远程服务实现进程通信以及进程间传递自定义类型参数 http://blog.csdn.net/honeybaby201314/article/details/19989455 (3) Androi

Android AIDL Service 跨进程传递复杂数据

黑夜 黑夜给了我黑色的眼睛,我却用它寻找光明~ 传值方式 AIDL是同意跨进程传递值的,一般来说有三种方式: - 广播:这样的算是比較常见的一种方式了,传递小数据不错 - 文件:这个是保存到文件里.然后读取,传递大数据不错 - Service Bind模式.这个算是居中的一种方式,只是效率要高的多,唯一麻烦的是编写代码较为麻烦. 特别是复杂类型数据传递麻烦. 其是,另一些其它的办法进行数据传递.另外传递也并非仅仅能够使用一种,能够採用几种结合的方式进行. 今天要说的就是Service Bind进

Android AIDL开发

Introduction   在Android中, 每个应用程序都运行在自己的进程中,拥有独立的内存空间.但是有些时候我们的应用程序需要跟其它的应用程序进行通信,这个时候该怎么办呢?显然, Java中不允许跨进程内存共享.无法直接交换数据.Android中可以采用AIDL的方式实现进程间通信(interprocess communication(IPC)). Android Developer原文介绍如下:AIDL (Android Interface Definition Language)

Android AIDL使用详解

1.什么是aidl:aidl是 Android Interface definition language的缩写,一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口 icp:interprocess communication :内部进程通信 2.既然aidl可以定义并实现进程通信,那么我们怎么使用它呢?文档/android-sdk/docs/guide/developing/tools/aidl.html中对步骤作了详细描述: --1.Create

Using self-defined Parcelable objects during an Android AIDL RPC / IPC call

Using self-defined Parcelable objects during an Android AIDL RPC / IPC call In my previous post “Using the Android Interface Definition Language (AIDL) to make a Remote Procedure Call (RPC) in Android” I’ve explained the basics on how inter-process c

Android AIDL 使用示例

介绍: AIDL 即  Android Interface Definition Language 使用: 1.新建.aidl文件 1 //AIDL 文件所在的包 2 package com.houny.demo_aidl.aidl; 3 4 //接口名必须和AIDL文件名一致 5 interface ISay{ 6 boolean Say(); 7 boolean SayInt(int i); 8 boolean SayString(String str); 9 } 2.新建Service,并

android aidl摘要

/*在Android中, 每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢? 显然, Java中是不支持跨进程内存共享的.因此要传递对象, 需要把对象解析成操作系统能够理解的数据格式, 以达到跨界对象访问的目的.在JavaEE中,采用RMI通过序列化传递对象.在Android中, 则采用AIDL(Android Interface Definition Language:接口描述语言)方式实现. AIDL是一种接口定义语言,用于约束两个进程间的通讯规则,供编译器生成代码

Android AIDL 实现过程

Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信.为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现.与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口.我们知道4个Android应用程序组件中的3个(Activity.BroadcastRece

Android AIDL例子

为使应用程序之间能够彼此通信,Android提供了IPC (Inter Process Communication,进程间通信)的一种独特实现: AIDL (Android Interface Definition Language, Android接口定义语言). 建立两个Android项目,一个是client,一个是server(提供service). 这篇文章将通过一个项目来介绍AIDL用法,包含了service和client.可能简单了些,不过轻省许多. 本文提供了一个关于AIDL使用的