Android 四大组件学习之Service七

本节学习Service的分类: 本地服务, 远程服务

本地服务: 指的是服务和启动服务的activity在同一个进程中

远程服务:指的是服务和启动服务的activity不在同一个进程中

我们以前使用的都是本地服务,今天我们学习远程服务。学习远程服务就必须要学习AIDL(Android Interface Definition Language)安卓接口定义语言。编译器通过AIDL文件的描述信息生成符合通信协议的JAVA代码。我们在进程间通信的时候只需要调用即可。

既然要实现远程服务,就需要一个服务端,一个客户端。

我们实现如下一例子。 游戏支付,一般游戏支付的话都会选择第三方的平台,比如支付宝。 而支付宝的支付接口不是会放到游戏进程中运行,那么支付宝支付服务就是个远程服务。而第三方游戏就是客户端

那我们先创建一个服务端:

public class ZhiFuBaoService extends Service {

	@Override
	public IBinder onBind(Intent arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	/*中间人的支付方法*/
	class Pay extends Binder implements ZhiFuInterface
	{
		public void PayMoney()
		{
			ZhiFuBaoPay();
		}
	}

	/*支付宝的支付接口*/
	public void ZhiFuBaoPay()
	{
		Log.i("ZhiFuBaoService", "支付成功!");
	}

}

如果是本地服务,我们的Service就是如上的形式,但是如果是远程服务,就必须使用AIDL接口定义语言,对上面的代码改造。

第一步: 把远程服务的方法抽取成一个单独的接口java文件,也就是我们的PayMoney方法,这个已经为接口了

第二步: 把接口java文件的后缀名改成aidl

注意: aidl文件中的方法全是public方法,如果有public就必须去掉,不然会报错

第三步: 在自动生成的ZhiFuInterface.java文件中,有一个静态类Stub,它已经继承了binder类,实现了ZhiFuInterface接口了。

所以我们的中间人就改为:

	/*中间人的支付方法*/
	class Pay extends Stub
	{
		public void PayMoney()
		{
			ZhiFuBaoPay();
		}
	}

因为第四步是和客户端相关的,我们先创建一个某游戏客户端,客户端Activity中有一个支付按钮,用于支付

第四步: 把aidl文件复制粘贴到客户端项目,粘贴的时候注意,aidl文件所在的包名必须跟服务端项目中aidl所在的包名一致

第五步: 在客户端项目中,强转中间人对象时,直接使用Stub.asInterface()

public class MainActivity extends Activity {

	private MyServiceConn conn;
	private Intent intent;
	ZhiFuInterface zhifu;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        intent = new Intent();
        conn = new MyServiceConn();
        //设置服务的action
        intent.setAction("com.demo.paymoney");
        //绑定远程服务
        bindService(intent, conn, BIND_AUTO_CREATE);
    }

    //支付游戏道具
    public void pay(View v)
    {
    	try {
			zhifu.PayMoney();
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }

    class MyServiceConn implements ServiceConnection
    {

		@Override
		public void onServiceConnected(ComponentName arg0, IBinder arg1) {
			// TODO Auto-generated method stub
			zhifu = Stub.asInterface(arg1);
		}

		@Override
		public void onServiceDisconnected(ComponentName arg0) {
			// TODO Auto-generated method stub

		}
    }
}

记得服务端的Service需要到配置文件中注册:

        <service android:name="com.demo.aidlservice.ZhiFuBaoService">
            <intent-filter >
                <action android:name="com.demo.paymoney"/>
            </intent-filter>
        </service>

一下是运行情况,当你点击支付时,会有如下打印:

ok。 关于远程服务就说到这里

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-11 03:29:22

Android 四大组件学习之Service七的相关文章

Android 四大组件学习之Service五

本节学习IntentService, 可能就有人问了, 什么是IntentService, IntentService有什么作用? 不是已经有了Service,那为什么还要引入IntentService呢? 带着这两个问题,我们先来看一个例子: 我们新建一个MyIntentService例子: public class MyIntentService extends IntentService { private int count = 5; public MyIntentService() {

Android 四大组件学习之Service六

上几节.我们学习怎样用StartServer启动一个服务,用bindServer去绑定一个服务.以及服务的生命周期,以及什么是IntentService. 也许有读者会发现,我们BindServer中的第二个參数也就是ServiceConnection这种方法在将用bindService时好像没用到. 那本节课就学习. 那我们先说个事.上大学的时候.我学习不好,还是那种常常旷课的同学. 长期下去,老师跟前就混的不好了. 有次班里评选党员,我就想竞争一下,可是因为我常常不上课的同学,自然几率就小,

Android 四大组件学习之Service二

上节学习如何创建了一个Service,并且用Activity启动一个Service.这节我们在上节的基础上更加完善 这节学习用StartServer启动服务,并且在服务中每隔一秒打印出当前时间 举例说明: MyActivity代码: public class MyActivity extends Activity { private Button btn_start; private Button btn_end; @Override protected void onCreate(Bundle

Android 四大组件学习之Service四

本节学习Service的生命周期. 既然Activity有生命周期,那同理Service也有自己的生命周期. 和学习Activity一样,我们先贴出Google官网给Service下的定义,以及生命周期图 从图中可以看到,左面一路下来是我们第二节课中说的用StartServer启动服务的流程.右面一路下来的是第三节中说的用BindService启动服务的流程. 在上两节中都看到了如何启动服务,同时销毁服务.既然这年代是混搭的年代,那当然也需要这两种服务混搭起来使用. 先来看看MyActivity

Android 四大组件学习之Service三

上节我们学习了,如何用StartService启动服务,这节学习如何用BindService启动一个服务 首先看MyActivity的代码部分: public class MyActivity extends Activity { private Button btn_start; private Button btn_end; private MyServiceConnection sConnection; @Override protected void onCreate(Bundle sa

android四大组件学习总结以及各个组件示例(1)

android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个Activity通常就是一个单独的屏幕(窗口). (2)Activity之间通过Intent进行通信. (3)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity. (4)Activity生命周期>什么是

Android 四大组件学习之Activity一

Activity是Android四大组件中最基础也是最常用的组件之一.Activity作为一个应用程序组件,提供了一个与用户交互的界面.可以这么说Activity是和用户操作有密切相关的的,常用来负责与用户交互,可以通过setContentView来显示组件. 今天我们学习如何去创建一个Activity 第一步: 创建一个Android Application Project, 填入应用名称,工程名称,包名 点击Next下一步:下面的选择都是默认的. 直到 你就可以选择一个Activity进行创

Android 四大组件学习之BroadcastReceiver一

本节课学习四大组件最后一个, 广播接受者. 顾名思义广播接受者就是接受广播呗.比如在现实社会中,以前每个人家都有一台收音机,这可就可以去接受广播发出来的消息.大家都知道,程序世界也是参照的显示生活设计出来的,那在Android系统中也引入了广播这个概念.那在Android系统中广播有什么作用呢? 举个例子:比如你正在玩游戏或者看视频突然手机电量过低,这时候就会弹出一个框,提醒您手机电量过低,请充电的提示.其实电量改变就是一种广播类型,当电量过低时,系统就会发生一条广播,这时候正在运行的程序就会收

Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)

转载于:http://blog.csdn.net/byxdaz/article/details/9708491 http://blog.csdn.net/q876266464/article/details/19641251 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,Broadcast Receiver广播接收器. 一.了解四大基本组件 Activity : 应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以