android编写Service入门_本地和远程调用

合集下载

Service

Service

Binder系统
Binder情景分析 可以将一个IPC通讯理解成客户端/服务器模式,一 个典型的Binder应用模式如下: 1.客户端通过某种方式得到服务器端的代理对象 ,从客户端看代理对象和他的本地对象没有什么分别,一 样可以调用方法,访问变量。 2.客户端通过调用服务器代理对象的方法向服务 器端发送请求。 3.代理对象将用户请求通过Android内核的Binder 驱动发送到服务器进程。 4.服务器进程处理用户请求,并通过Binder驱动 返回处理结果给客户端的代理对象。 5.客户端收到代理对象返回的处理结果。
START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完 onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。 onStart 方法的创建的service一开始是onCreate 然后调用onStartCommand() (在老的版 本中是onStart()函数,新版本中调用onStartCommand的话还是会去调用onStart方 法,建议使用onStartCommand方式)。如果该service不stop的话,再点的话一直会是 onstart相应,onCreate只有在第一次启动的时候会调用。
绑定一个已经存在的Service
//连接对象
private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder ibinder) {Log.i(“Service”,“连接成功!”);} public void onServiceDisconnected(ComponentName name) {Log.i(“Service”,“断开连接!”);} }; //绑定Service bindService(intent,conn,Service.BIND_AUTO_CREATE);

android systemservice类理解

android systemservice类理解

android systemservice类理解Android SystemServer类是Android系统中的一个重要组件,负责管理系统中的各种服务和功能模块。

了解SystemServer类的工作原理和功能对于理解Android系统的整体架构非常重要。

本文将深入探讨Android SystemServer类的相关知识,帮助读者更好地理解和掌握Android系统的工作原理。

SystemServer类是Android系统启动过程中的一个关键角色,它在系统启动时被创建并负责启动和管理系统中的各种服务。

SystemServer类的主要作用包括但不限于以下几个方面:1. 启动系统服务:SystemServer类负责启动系统中的各种服务,包括ActivityManagerService、PowerManagerService、PackageManagerService等。

这些系统服务是Android系统正常运行的基础,SystemServer类通过启动这些服务确保系统的正常运行。

2. 管理系统功能模块:SystemServer类还负责管理系统中的各种功能模块,包括输入管理、窗口管理、通信管理等。

它通过调用相应的模块来管理系统的各项功能,确保系统的稳定运行。

3. 处理系统启动流程:SystemServer类在系统启动时被创建并启动,它会依次启动系统中的各个服务和功能模块,完成系统的初始化和准备工作。

系统启动的过程中,SystemServer类扮演着重要的角色。

了解SystemServer类的工作原理和功能有助于我们更好地理解Android系统的整体架构。

在Android系统的启动过程中,SystemServer类起着至关重要的作用,它负责启动系统中的各种服务和功能模块,确保系统的正常运行。

SystemServer类的工作原理可以总结为以下几个步骤:1. 创建SystemServer实例:系统启动时,SystemServer类的实例会被创建并初始化。

service

service

Service一、 Service简介Service是android 系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,但不能自己运行只能后台运行,并且可以和其他组件进行交互。

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

二、创建、配置service1、定义一个继承service的类,并实现相应的接口。

2、AndroidManifest.xml中配置该service。

三、Service启动、停止Service的启动有两种方式:context.startService() 和context.bindService()Serviced的停止方式:其他组件:context.stopService(),自己:Service.stopSelf()方法或者Service.stopSelfResult()1、context.startService() 启动流程:context.startService() -> onCreate() -> onStart() -> Servicerunning -> context.stopService() -> onDestroy() -> Service stop如果Service还没有运行,则android先调用onCreate(),然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。

如果stopService的时候会直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行,该Service的调用者再启动起来后可以通过stopService关闭Service。

android 调用webservice 连接sqlserver实例

android 调用webservice 连接sqlserver实例

Android 调用 WebService 连接 SQLServer 实例详解随着移动互联网的快速发展,Android 应用程序越来越普及。

在开发 Android 应用程序时,我们经常需要与远程数据库进行交互。

SQL Server 是一种流行的关系型数据库,而 WebService 是一种常用的远程调用技术。

下面我们将详细介绍如何在 Android 应用程序中调用 WebService,连接 SQLServer 数据库的实例。

一、准备工作1.安装 SQL Server:首先需要在本地或远程服务器上安装 SQL Server 数据库,并创建一个数据库和相应的表。

2.创建 WebService:创建一个 WebService,该 WebService 将连接到 SQLServer 数据库,执行相应的操作,并将结果返回给客户端。

3.创建 Android 项目:使用 Android Studio 创建一个新的 Android 项目,并添加必要的依赖项。

二、调用 WebService1.添加 WebService 地址:在 Android 项目中,将 WebService 的地址添加到项目的 URL 列表中。

2.创建 WebService 客户端:使用 HttpClient 或 OkHttp 等网络库创建WebService 客户端,并实现相应的回调接口。

3.调用 WebService 方法:调用 WebService 方法,并传递必要的参数。

例如,调用查询数据的 WebService 方法,并传递查询条件。

4.处理返回结果:在回调接口中处理返回结果,例如解析 JSON 数据。

三、连接 SQLServer1.使用 JDBC:使用 JDBC(Java Database Connectivity)连接 SQL Server数据库。

首先需要下载并安装相应的 JDBC 驱动程序,然后在代码中加载驱动程序,建立连接。

Android开发之远程服务

Android开发之远程服务

Android开发之远程服务(Remote Service)为实现远程服务,需要分步骤完成如下动作:编写远程Service预估客户端可能调用到的函数,编写AIDL编写远程Service调用程序组件间参数传递下面以使用远程Service完成音乐的后台播放功能的实现为例:为实现后台音乐的播放,必须将MediaPlayer的控制放在Service端进行控制,也就是说,MediaPlayer表面上是受控于Activity,但实际上是受控于Service。

所以,我们首先编写远程Service,实现Service对MediaPlayer的控制,进而实现音乐播放。

而在编写Service的时候,还应考虑需要在客户端调用的函数,并将对应的声明集成到AIDL格式文件中,从而得到桩子。

而客户端主要完成Service的调用和UI的更新。

远程Service的编写远程Service将一些自身使用的函数定义成私有类型,将一些需要被客户端调用的函数定义成公有类型,为了给客户端提供接口,还需将这些公有类型的函数放置在IBinder中,该IBinder通过RemoteService接口的Stub定义。

具体如下:private Binder mbinder = new IRemoteMusicService.Stub(){@Overridepublic void pause()throws RemoteException{if(mMediaPlayer.isPlaying()){mMediaPlayer.pause();state=PAUSE;}}@Overridepublic void start()throws RemoteException{if (state == STOP) {play();} else if (state == PAUSE) {mMediaPlayer.start();state = PLAY;}}……}为避免产生不必要的远程调用异常,函数设置为可抛出RemoteException。

android远程控制原理

android远程控制原理

android远程控制原理Android远程控制原理Android远程控制指的是使用其他设备远程控制Android设备上的应用程序和操作系统。

这种控制可以通过Wi-Fi、蓝牙、4G等网络连接方式实现。

以下是Android远程控制的原理:1.远程控制软件:用户需要安装一款远程控制软件到自己的Android 设备上。

在市场上有多种远程控制软件,如TeamViewer、AirDroid 等。

2.通信协议:Android设备和远程控制设备之间的通信需要遵循特定的协议。

一般来说,远程控制软件会使用HTTP、UDP等协议实现数据传输。

3.权限:Android应用程序需要获取相关的权限才能被远程控制。

一般来说,远程控制软件需要获取以下权限:Internet权限、读取和写入SD卡权限、管理WiFi和蓝牙连接权限等。

4.服务端:远程控制软件一般会在设备上开启一个服务端,等待其他设备连接。

这个服务端会监听特定的端口,等待其他设备连接。

一旦连接成功,服务端就会将控制权转移到远程设备。

5.控制:一旦连接成功,远程设备就可以对Android设备进行控制操作,包括查看屏幕、控制鼠标、输入文本等。

同时,Android设备也可以将控制权交回给本机。

总的来说,Android远程控制的过程就是通过远程控制软件实现数据通信,获取相关权限,开启服务端,等待其他设备连接,一旦连接成功,控制端就可以对被控制端进行操作。

需要注意的是,Android远程控制虽然方便快捷,但也有安全隐患,例如未经授权使用被控制的设备、窃取用户数据等。

因此,在使用Android远程控制时,需要选择可靠的软件,注意安全问题,保护个人隐私。

Android远程控制的应用范围非常广泛,例如远程控制家居设备、管理网络设备、实现远程协作、为远程维护提供便利等等。

随着技术的不断进步,Android远程控制也将变得越来越普遍和方便。

Android远程Service调用(RPC)实现步骤详解

Android远程Service调用(RPC)实现步骤详解

开始介绍之前,先看一下本例的界面:Android远程Service调用简介:远程Service调用,是Android系统为了提供进程间通信而提供的轻量级实现方式,这种方式采用一种称为远程进程调用技术来实现,英文名全称是Remote Procedure Call,即RPC。

RPC简介:远程进程调用是指在一个进程里,调用另外一个进程里的服务。

Android通过接口定义语言来生成两个进程间的访问代码。

接口定义语言(Android Interface Definition Language,即AIDL)是Android系统的一种接口描述语言,Android编译器可以将AIDL文件编译成一段JA V A代码,生成相对的接口。

下面来详细介绍下如何通过RPC机制来达到远程进程调用的目的和步骤。

第一,我们要先弄清楚这是怎么样的一个流程。

用通俗点语言来说,打个例子:比如公司A提供A服务,并且这种服务是对外开放的,也就是其他公司或者个人都可以通过某种方式来使用这种服务,公司B想要使用A公司的A服务,就以通过公司A编制的一种形式来使用它。

用图来表示就是:公司B通过公司A的某种形式来使用公司A提供的服务A现在,我们可以说,进程B可以通过进程A提供的某种形式来使用进程A的服务A。

这个过程就是RPC。

了解基本概念之后,我们可以开始进行RPC的实现步骤。

下面我们分点来说明实现RPC 的步骤。

第一、创建AIDL文件。

这个文件和普通的JA V A文件差不多,只不过后缀名是.aidl。

这个文件相当于一个接口,里面要声明一些你想对外提供服务的方法,也就是你要对外暴露的方法。

注意,这个文件里,除了JA V A基本类型和String,List,Map和Charquene类型不需要引入相应的包外,其他的都要引入包。

例如我们创建一个IPerson.aidl文件,里面只声明了一个方法display():package com.test.service;interface IPersonaidl {String display();//该接口里面所有的方法都应该是你想对外暴露的}第二、创建完AIDL文件后,刷新项目,会发现在gen目录对应的目录下会生成一个IPerson.java接口文件,打开该文件,会发现你在aidl文件里面定义的display()方法,不过没有实现。

Android中的Service概念及用途

Android中的Service概念及用途

Service概念及用途Android中的Service,其意思是“服务”,它是在后台运行,不可交互的。

Service自己不能运行,需要通过某一个Activity或者其它Context对象来调用,如Context .startService() 和Context.bindService()两种方式启动Service 。

Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,那我们什么时候会用到Service呢?比如我们播放音乐的时候,有可能想边听音乐边干些其他事情,当我们退出播放音乐的应用,如果不用Service,我们就听不到歌了,所以这时候就得用到Service了,又比如当我们一个应用的数据是通过网络获取的,不同时间(一段时间)的数据是不同的这时候我们可以用Service在后台定时更新,而不用每打开应用的时候在去获取。

如果在Service的onCreate或者onStart方法中做一些很耗时的动作,最好是启动一个新线程来运行这个Service,因为,如果Service运行在主线程中,会影响到程序的UI操作或者阻塞主线程中的其它事情。

Service生命周期Service的生命周期方法比Activity要少一些,只有onCreate、onStart、onDestroy。

有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。

1)通过startService启动Service启动的时候会经历生成开始(onCreate onStart)过程,Service停止的时候直接进入销毁过程(onDestroy)。

而如果是调用者直接退出而没有调用stopService,Service会一直在后台运行。

直到下次调用者再启动起来,并明确调用stopService。

2)通过bindService启动通过bindService方法启动Service,其只会运行onCreate方法,如果调用退出了,Service会调用onUnbind,onDestroyed方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

android编写Service入门android SDK提供了Service,用于类似*nix守护进程或者windows的服务。

Service有两种类型:1.本地服务(Local Service):用于应用程序内部2.远程服务(Remote Sercie):用于android系统内部的应用程序之间前者用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单开线程后台执行,这样用户体验比较好。

后者可被其他应用程序复用,比如天气预报服务,其他应用程序不需要再写这样的服务,调用已有的即可。

编写不需和Activity交互的本地服务示例本地服务编写比较简单。

首先,要创建一个Service类,该类继承android的Service类。

这里写了一个计数服务的类,每秒钟为计数器加一。

在服务类的内部,还创建了一个线程,用于实现后台执行上述业务逻辑。

package com.easymorse;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.util.Log;public class CountService extends Service {private boolean threadDisable;private int count;@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();new Thread(new Runnable() {@Overridepublic void run() {while (!threadDisable) {try {Thread.sleep(1000);} catch (InterruptedException e) {}count++;Log.v("CountService", "Count is " + count);}}}).start();}@Overridepublic void onDestroy() {super.onDestroy();this.threadDisable = true;Log.v("CountService", "on destroy");}public int getCount() {return count;}}需要将该服务注册到配置文件AndroidManifest.xml中,否则无法找到:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.easymorse" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".LocalServiceDemoActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="UNCHER"/> </intent-filter></activity><service android:name="CountService"/></application><uses-sdk android:minSdkVersion="3"/></manifest>在Activity中启动和关闭本地服务。

package com.easymorse;import android.app.Activity;import android.content.Intent;import android.os.Bundle;public class LocalServiceDemoActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);this.startService(new Intent(this, CountService.class));}@Overrideprotected void onDestroy() {super.onDestroy();this.stopService(new Intent(this, CountService.class));}}可通过日志查看到后台线程打印的计数内容。

编写本地服务和Activity交互的示例上面的示例是通过startService和stopService启动关闭服务的。

适用于服务和activity之间没有调用交互的情况。

如果之间需要传递参数或者方法调用。

需要使用bind和unbind方法。

具体做法是,服务类需要增加接口,比如ICountService,另外,服务类需要有一个内部类,这样可以方便访问外部类的封装数据,这个内部类需要继承Binder类并实现ICountService接口。

还有,就是要实现Service的onBind方法,不能只传回一个null了。

这是新建立的接口代码:package com.easymorse;public interface ICountService {public abstract int getCount();}修改后的CountService代码:package com.easymorse;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;import android.util.Log;public class CountService extends Service implements ICountService {private boolean threadDisable;private int count;private ServiceBinder serviceBinder=new ServiceBinder();public class ServiceBinder extends Binder implements ICountService{@Overridepublic int getCount() {return count;}}@Overridepublic IBinder onBind(Intent intent) {return serviceBinder;}@Overridepublic void onCreate() {super.onCreate();new Thread(new Runnable() {@Overridepublic void run() {while (!threadDisable) {try {Thread.sleep(1000);} catch (InterruptedException e) {}count++;Log.v("CountService", "Count is " + count);}}}).start();}@Overridepublic void onDestroy() {super.onDestroy();this.threadDisable = true;Log.v("CountService", "on destroy");}/* (non-Javadoc)* @see com.easymorse.ICountService#getCount()*/public int getCount() {return count;}}服务的注册也要做改动,AndroidManifest.xml文件:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.easymorse" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".LocalServiceDemoActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="UNCHER"/> </intent-filter></activity><service android:name="CountService"><intent-filter><action android:name="com.easymorse.CountService"/></intent-filter></service></application><uses-sdk android:minSdkVersion="3"/></manifest>Acitity代码不再通过startSerivce和stopService启动关闭服务,另外,需要通过ServiceConnection的内部类实现来连接Service和Activity。

相关文档
最新文档