service(二) Android Studio 编写远程服务
2015-10-20 16:20
441 查看
本文参考于 http://android.blog.51cto.com/268543/537684/
相信eclipse中大家 对远程服务都有一定的了解 。这里我在网上找了点资料,并尝试了下 在Android studio中编写远程服务。
网上有两种做法,这里我只用了一种:
首先切换到project目录下,在main文件夹下创建文件 aidl,然后在aidl创建包名(Manifest中的包名),再在这个包里创建我们的服务IMyService.aidl。编译一下,在build/generated/source/aidl/debug/包名,在包名下面就可以发现studio为我们生成的文件。
下面是我的服务文件:
package com.example.xiao8.myapplication;
interface IMyService{
void savePersonInfo(int personId);
}
AIDL使用简单的语法来声明接口,描述其方法以及方法的参数和返回值。这些参数和返回值可以是任何类型,甚至是其他AIDL生成的接口。
其中对于Java编程语言的基本数据类型 (int, long, char, boolean等),String和CharSequence,集合接口类型List和Map,不需要import 语句。
而如果需要在AIDL中使用其他AIDL接口类型,需要import,即使是在相同包结构下。AIDL允许传递实现Parcelable接口的类,需要import.
需要特别注意的是,对于非基本数据类型,也不是String和CharSequence类型的,需要有方向指示,包括in、out和inout,in表示由客户端设置,out表示由服务端设置,inout是两者均可设置。
AIDL只支持接口方法,不能公开static变量。
(这里摘一下大神写的东西,希望大神能够原谅我)
我这里只写了个简单的int类型,如果需要复杂的类型的话参考http://android.blog.51cto.com/268543/537684/
下面我们写下远程服务的具体类:
下面写客户端:
同样执行下 服务器端aidl文件的创建:
首先切换到project目录下,在main文件夹下创建文件 aidl,然后在aidl创建包名(Manifest中的包名),再在这个包里创建我们的服务IMyService.aidl。编译一下,在build/generated/source/aidl/debug/包名,在包名下面就可以发现studio为我们生成的文件。
然后写下客户端的代码,这里和本地服务是相似的,只是获取服务的方法换成了IMyService.Stub.asInterface
相信eclipse中大家 对远程服务都有一定的了解 。这里我在网上找了点资料,并尝试了下 在Android studio中编写远程服务。
网上有两种做法,这里我只用了一种:
首先切换到project目录下,在main文件夹下创建文件 aidl,然后在aidl创建包名(Manifest中的包名),再在这个包里创建我们的服务IMyService.aidl。编译一下,在build/generated/source/aidl/debug/包名,在包名下面就可以发现studio为我们生成的文件。
下面是我的服务文件:
package com.example.xiao8.myapplication;
interface IMyService{
void savePersonInfo(int personId);
}
AIDL使用简单的语法来声明接口,描述其方法以及方法的参数和返回值。这些参数和返回值可以是任何类型,甚至是其他AIDL生成的接口。
其中对于Java编程语言的基本数据类型 (int, long, char, boolean等),String和CharSequence,集合接口类型List和Map,不需要import 语句。
而如果需要在AIDL中使用其他AIDL接口类型,需要import,即使是在相同包结构下。AIDL允许传递实现Parcelable接口的类,需要import.
需要特别注意的是,对于非基本数据类型,也不是String和CharSequence类型的,需要有方向指示,包括in、out和inout,in表示由客户端设置,out表示由服务端设置,inout是两者均可设置。
AIDL只支持接口方法,不能公开static变量。
(这里摘一下大神写的东西,希望大神能够原谅我)
我这里只写了个简单的int类型,如果需要复杂的类型的话参考http://android.blog.51cto.com/268543/537684/
下面我们写下远程服务的具体类:
public class RemoteService extends Service { public IBinder onBind(Intent intent) { Log.d("ljy","----server----接收到的数据----->"+intent.getStringExtra("msg")); return mBinder; } private final IMyService.Stub mBinder = new IMyService.Stub() { @Override public void savePersonInfo(int personId) throws RemoteException { Log.d("ljy", "-----personId------->" + personId); } }; }这里我们 new一个studio帮我们生成的对象IMyService.Stub,并在onBind中返回。和本地服务相似,只是Bind换成了Stub。
下面写客户端:
同样执行下 服务器端aidl文件的创建:
首先切换到project目录下,在main文件夹下创建文件 aidl,然后在aidl创建包名(Manifest中的包名),再在这个包里创建我们的服务IMyService.aidl。编译一下,在build/generated/source/aidl/debug/包名,在包名下面就可以发现studio为我们生成的文件。
然后写下客户端的代码,这里和本地服务是相似的,只是获取服务的方法换成了IMyService.Stub.asInterface
public class MainActivity extends AppCompatActivity { private IMyService mRemoteService; private ServiceConnection mRemoteConnection; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRemoteConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mRemoteService = IMyService.Stub.asInterface(service); //获取远程服务 } @Override public void onServiceDisconnected(ComponentName name) { } }; } public void doClick(View v){ Intent intent = new Intent("remoteService"); intent.putExtra("msg", "data"); switch (v.getId()){ case R.id.bind: bindService(intent,mRemoteConnection, BIND_AUTO_CREATE); break; case R.id.unbind: unbindService(mRemoteConnection); break; case R.id.set_data: if(null!=mRemoteService){ try { mRemoteService.savePersonInfo(10); } catch (RemoteException e) { e.printStackTrace(); } } break; } } }
相关文章推荐
- Jenkins+Gradle+checkstyle对Android工程源码进行静态代码分析
- android监测用户刚刚拍照
- Android fill_parent和wrap_content分析
- Jenkins+Gradle+findbugs对Android工程源码进行静态代码分析
- android开源项目框架大全:
- android之获取视频帧
- ANDROID应用与系统安全防御
- Android如何绘制Views
- Android providing resource
- Android类-BroadcastReceiver
- 百度地图导航与百度地图进行的坐标转换
- android环境变量的配置
- 从源码角度理解android动画Interpolator类的使用
- android中通过代码实现文件权限修改(chmod)
- Android配置文件权限一览表
- Android 性能优化
- Android防二次打包
- Android性能专项测试之耗电量统计API
- Android 反编译 APK 详解(附图)
- Android 倒计时(有效解决计时不准的问题)