- 浏览: 284847 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (142)
- android (64)
- android team 应用开发流程 (0)
- android 个人 开发流程 (1)
- android UI 切换皮肤 (1)
- java (9)
- 敏捷开发 (1)
- git (1)
- 学习 (2)
- hibernate (0)
- jQuery (1)
- windows (2)
- tomcat (1)
- Spring (3)
- struts2 (5)
- mysql (4)
- linux (15)
- JBPM (2)
- maven (4)
- 企业管理 (1)
- Iphone (1)
- 工作计划 (0)
- news (1)
- MOVE (1)
- exception-android (1)
- RFID (1)
- 测试 (7)
- android基础 (1)
- Gson (1)
- Android中的单元测试 (1)
最新评论
-
jlees:
Nice post.i hope this will help ...
Business mobile application development. The developer’s insight. -
weisi2375:
确实很详细的开发流程。
Android应用开发全流程 -
mikefather:
不错不错
Android,谁动了我的内存 -
ylzyd12345:
mark一下,谢谢分享
android的一些开源项目 -
limingcai:
确实不行,2.2就不行了,虽说2.3了 只有1.6可以
Android完全关闭应用程序
Android 应用开发 Bind Service 机制详解,android service ,android service 开发,android 应用开发,android bind service ,在android中有一个程序员大量使用的操作,就是bindservice,通过一个service可以实现代码的复用以及解耦,所以对这个bindservice的理解的深度直接影响了一个开发人员对于android系统开发的整体的掌握情况。
在开发中我们常常要用到这们一种情况,我们的UI逻辑和为UI逻辑提供服务的一些算法的是需要解耦的。这样,当我们UI和算法各自独立发生变化的时候,只要接口没有改变,对于UI的开发人员和算法的开发人员来将,就可以不去考虑,这个对与开发的好处,我想不用多说了。
Android的Service是基于IBinder 的, IBinder其实就是windows上的com 。
要使用service首先要通过AndroidMainifest.xml注册,这样在安装你的包的时候,系统就会识别出你所编写的serice,这样就可以提供给别的应用使用了。
一个典型service的AndroidMainifest.xml如下:
以下为引用内容:<service android:name="your_service_name" android:exported="true" android:process="your_service_process_name"> <intent-filter> <action android:name="intent_string_to_start_your_service" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </service>
这个service域要放在xml文件的application域中,其中android:name的意思是你的service的名字,可以是你想要的任意的字符串。android:process是当这个service被你的调用启动起来以后在系统中进程的名字。如果这个域没有写,那么默认的启动的是local的service,就是将service放到本地进程的主线程中,如何你之定了一个进程的名字,那么系统就会启动一个独立的进程作为你的服务,在shell中,通过ps就可以看到这个进程的名字。action android:name的意思是说那个Intent会启动这个service。
在添加了xml文件以后,就是正式的开写java的代码了。
首先,要创建一个aidl文件,这个和windows上的midl是一样的,估计就是一帮搞windows的人被google挖走了。android和根据这个aidl自动的声称一个infterface的文件做为service的接口文件。
这里提供一个例子:
以下为引用内容:package com.motorola.inputmethod.base; interface IYourAidl { int A(int i, in int[] j, out int[] k ); int B(int i, in int[] j, out int[] k ); }
在这里我们要注意的是你所定义的接口的变量的类型,android为一个他所默认的类型提供了相应的parcel服务类。如果你的参数的类型是一些 java的基本类型,或是string, arrayd等,是没有问题的,当如果参数是你自己定义的class类型,那么你就要写一个自己的parcel类了,这个以后我们还会说。还有就是,大家看如果A中的参数是int这些简单的类型的,那么没问题,如果是像int[]这样的类型的话,那么你要在类型的情面加上in 或是 out来告诉系统这个是一个输入还是输出参数。
在写完aidl文件以后我们在添加一个对应与aidl文件的Android.mk文件。如下:
以下为引用内容:LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := \ path_to_your_aidl_file/your_test.aidl LOCAL_MODULE := com.android.youraidl include $(BUILD_STATIC_JAVA_LIBRARY)
在搞定aidl以后,我们开始实现一个使用这个aidl的service,其实一个service可以还有任何一个对象,不一定要含有aidl的,这里我们只是使用了aidl作为service的一个对象,其实service是service,aidl是aidl,这个希望大家能够理解。
一个service如下:
以下为引用内容:import android.app.Service; import path_to_your_aidl_file.IYourAidl; public class your_service_name extends Service { public void onCreate() { super.onCreate(); log.d("service onCreate") } public void onDestroy() { super.onDestroy(); log.d("service onDestroy") } private final IYourAidl.Stub mBinder = new IYourAidl.Stub(){ public int A(int i, in int[] j, out int[] k ){ log.d("aidl implimention do something in A"); } public int B(int i, in int[] j, out int[] k ){ log.d("aidl implimention do something in B"); } } public IBinder onBind(Intent intent) { return mBinder; } } 在你实现的service中,首先要保证你的service的名字和AndroidMainifest.xml中的android:name的名字是一样的。然后,在你的service中要实现onCreate和onDestroy两个接口,onBind操作返回的是一个IBinder的子类,在这里我们返回的是aidl的一个实现。在你启动一个service的时候,service首先调用onCreate然后调用onBind返回service本地的一个对象。 在service中,引为aidl是一个抽象类,所以我们要提供一分基于该接口的实现。 现在service这边就准备好了,当你的service被安装到系统以后,一个客户端就可启动他了。 启动代码如下: 以下为引用内容: import android.content.ServiceConnection; import path_to_your_aidl_file.IYourAidl; import your_service_name; ............. private IYourAidl mAidl; private class YourServiceConnection implements ServiceConnection { public void onServiceConnected(ComponentName name, IBinder service) { mAidl = IYourAidl.Stub.asInterface(service); } public void onServiceDisconnected(ComponentName name) {} } private YourServiceConnection mServiceConnection; public boolean startService(){ if (null == mAidl) { Intent serviceIntent = new Intent("intent_string_to_start_your_service"); if (null == mServiceConnection) { mServiceConnection = new YourServiceConnection(); } // Bind service if (bindService(serviceIntent, mServiceConnection, Context.BIND_AUTO_CREATE)) { return true; } else { return false; } } return true; }
当客户端调用startService的时候,最忠会调用bindService, 他的第一个参数是一个intent就是和xml文件相同的Intent名字的一个intent。第二个参数是一个ServiceConnection对象,作为回调函数, Context.BIND_AUTO_CREATE表示的是自动绑定。
在用户调用bindservice以后,系统会检查是否有符合Intent的service,如果有的话就创建了,如果没有的话,就创建一个新的 service,并调用service的onCreate接口。同时如果制定了ServiceConnection对象和 BIND_AUTO_CREATE参数,那么就会调用service的onBind接口,onBind接口返回的IBinder对象传个 ServiceConnection的onServiceConnected的第二个参数。
在onServiceConnected中通过mAidl = IYourAidl.Stub.asInterface(service);将远程的一个变量和本地的一个变量绑定。从而实现了RPC调用,这样,用户进程就是可以像使用本地变量一样通过PRC调用远程的操作了。BindService操作是一个异步的操作,所以什么时候能调用 onServiceConnected是不一定的,如果在用户进程中bindservice以后直接使用mAidl而没有判断的话,很可能会有错误。
同时如果通过mAidl调用远程操作的话,需要将操作包含在
以下为引用内容:try{ mAidl.A(.....) } catch(RemoteException e) { Log.e("error", e.getMessage()); }
中
在Service背后支持着他的是IBinder的 IPC 机制
发表评论
-
Resource-type-->Color State List Resource
2013-04-22 10:50 1679Color State List Resource Col ... -
Business mobile application development. The developer’s insight.
2012-11-07 17:49 1651from: http://www.enterra-inc.co ... -
Android. Handling some SQLite issues.
2012-11-07 17:48 1787转载: http://www.enterra-inc.com/ ... -
git 获取android source
2012-08-15 12:52 3685在做android开发的时,在遇到某一问题,想看andro ... -
Android 手机上获取物理唯一标识码
2012-07-27 10:27 11776唯一标识码这东西在网络应用中非常有用,例如检测是否 ... -
android listview adapter
2012-06-23 14:41 1022listview 在什么情况下会刷新: 1. 当ada ... -
Android多线程下载详解
2012-06-20 18:31 945http://www.pin5i.com/showtopic- ... -
Unable to open sync connection!
2012-06-18 17:04 971把设置里的USB调试重新开了开,问题解决! -
android checkbox 定制(修改checkbox 的图片)
2012-06-18 14:30 3654转载:http://www.bangchui.org/read ... -
Android ProgressBar自定义图片进度,自定义渐变色进度条
2012-06-15 16:53 7594 -
Android应用开发全流程
2012-06-15 09:21 3783转载:http://blog.csd ... -
intent.setDataAndType
2012-06-13 18:24 75001. Intent open a picture ... -
Android操作HTTP实现与服务器通信
2012-06-03 14:47 1747本示例以Servlet为例,演示Android与Serv ... -
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thre
2012-06-03 12:00 9042当应用程序启动,创建了一个叫“main”的线程,用于管理 ... -
这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用。 1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开
2012-05-25 13:58 1530这篇文章是android开发人员的必备知识,是我特别为大 ... -
android Collections.sort(List<T> list) 与JAVA Collections.sort(List<T> list)
2012-05-04 10:33 1863Info.java : public class In ... -
android string xliff:g
2012-03-22 10:47 1022这个主要用于程序中,动态的插入内容时候使用,例如, ... -
android的一些开源项目
2011-12-07 17:13 2172转自: http://www.uuroid.com ... -
Understanding the Android Build Process
2011-11-25 12:38 982http://www.alittlemadness.com/2 ... -
Android 命令行手动编译打包详解
2011-11-24 10:07 1249Android 命令行手动编译打包过程图 【详细步骤】: 1 ...
相关推荐
这篇博客"Android Service深入解析Demo"通过实例深入讲解了Service的相关知识,下面将详细阐述Service的核心概念、生命周期、启动与绑定方式以及如何在实践中应用。 1. **Service核心概念** Service是Android系统...
本篇文章将全面解析Android Service的相关知识点,包括Service的生命周期、启动与绑定方式、交互机制以及注意事项。 首先,Service的生命周期主要由四个方法构成:onCreate(), onStartCommand(), onBind(), 和...
在Android应用开发中,Service是四大组件之一,它在后台执行长时间运行的...通过阅读"Android中Service完全解析(上)"这篇博客和对应的"MyService"源码,可以深入了解Service的运作机制,为实际项目开发打下坚实基础。
本篇文章将深入解析"android service 简单实例源代码",帮助你理解如何在Android应用中创建和使用Service。 首先,我们来了解一下Service的基本概念。Service主要分为两种类型:标准Service和IntentService。标准...
在Android应用开发中,Service是四大组件之一,用于在后台执行长时间运行的操作,即使用户离开了应用程序界面,Service依然可以运行。本教程将深入探讨如何正确地停止一个Android Service,同时结合源码分析其内部...
在Android开发中,首先我们需要理解的是Android的四大组件:Activity、Service、BroadcastReceiver和ContentProvider。Activity是用户界面的入口,负责展示UI并与用户交互;Service是在后台运行,不与用户交互的服务...
【Android Service 深度解析】 在安卓应用开发中,`Service` 是一个非常重要的组件,它用于在后台执行长时间运行的操作,即使用户与应用程序没有交互。本篇将深入探讨 `ServiceSample` 示例代码,帮助你理解如何在 ...
### Android各组件详解——Service深度解析 在深入探讨Service组件之前,我们首先简要回顾一下Android...理解和掌握Service的创建、生命周期管理以及跨进程调用机制,对于开发高质量、高效率的Android应用至关重要。
在Android应用开发中,Service是四大组件之一,它在后台长时间运行,即使用户与应用程序的交互界面已经关闭。本篇文章将深入探讨“Android Service”的使用,以实例解析其功能和重要性。 首先,Service并不创建一个...
【Android Native Service 深入解析】 在 Android 开发中,Native Service 是一个重要的概念,它允许开发者在原生 C/C++ 代码中实现服务,从而利用底层性能优化和访问硬件资源。本 Demo 旨在展示如何创建和使用 ...
### Android开发基础习题知识点解析 #### 一、填空题知识点解析 1. **Android系统是由** **Google** **开发的。** - **知识点解释:** Android是一款基于Linux内核的操作系统,最初由Andy Rubin开发并在2003年...
本篇文章将深入解析Android Service的生命周期。 1. Service的定义 Service是继承自ContextWrapper类的,其父类ContextWrapper又继承自Context类。Service是Android应用中的一个特殊类,用于执行那些需要在后台持续...
在Android开发中,Service是应用程序组件之一,它用于在后台执行长时间运行的操作,即使用户不在与应用交互。Service不提供用户界面,但可以与其他组件(如Activity)交互。本篇文章将深入探讨Service的使用方法,...
以下是一个关于Service生命周期的详细解析,结合代码示例来阐述如何在Android中操作Service。 1. **Service生命周期概述** Service的生命周期主要包含以下几个阶段:onCreate()、onStartCommand()、onBind()、...
在Android开发中,Service常被用来在后台执行任务,如播放音乐、网络通信等。本示例代码将全面解析Service的两种启动模式——`startService`和`bindService`,以及进程内如何与服务进行通信。 1. **startService...
### Android中的Service全面解析 #### Service的种类与分类 在Android开发中,Service是一种用于执行长时间运行的操作,如后台音乐播放、数据下载等,而无需用户界面交互的应用组件。根据不同的标准,Service可以...
在Android应用开发中,`Service`是一个至关重要的组件,它允许开发者在后台执行长时间运行的操作,即使用户已经离开应用程序的界面。本篇文章将深入解析`Service`的工作原理、使用场景、启动方式以及生命周期,帮助...
在Android应用开发中,Service是四大组件之一,它在后台执行长时间运行的操作,不与用户交互。本篇文章将深入探讨“Android学习之路——7.Service”,分析Service的基本概念、使用方式以及常见应用场景,同时结合...
在Android开发中,Service是四大组件之一,它在后台运行,执行长时间的操作,如播放音乐、网络通信等,不提供用户界面。本篇文章将深入解析Android Service的源码,帮助开发者更好地理解和使用这一关键组件。 首先...
在Android应用开发中,Service是四大组件之一,它在后台执行长时间运行的操作,不与用户界面直接交互。本文将深入探讨Android Service的源代码解析,帮助开发者更好地理解和使用这一核心组件。 1. **Service的基本...