Service(远程服务)
来源:互联网 发布:广东中标数据科技 编辑:程序博客网 时间:2024/05/16 09:05
Service服务分为两种:
本地服务(Local Service): 在同一个进程(软件apk)中调用
远程服务(Remote Service):在另外一个进程中调用这个进程中的一些方法
两个进程之间的通信是要借助AIDL
AIDL全称
Android Interface Definition Language(借口定义语言)编译器可以通过aidl文件生成一段代码,通过预先定义的借口达到两个进程内部通信进程跨界对象访问的目的。
MainActivity.java的代码如下:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_main_number = (EditText) findViewById(R.id.et_main_number); et_main_pwd = (EditText) findViewById(R.id.et_main_pwd); //服务路径 intent = new Intent(this,QQLoginService.class); } ServiceConnection connection=new ServiceConnection() { @Override //服务链接成功 public void onServiceConnected(ComponentName componentName, IBinder iBinder) { Log.i("text","绑定成功"); qqLoginInterfaceOut = QQLoginInterfaceOut.Stub.asInterface(iBinder); } @Override //服务链接失败 public void onServiceDisconnected(ComponentName componentName) { } }; @Override protected void onResume() { super.onResume(); //绑定服务 bindService(intent,connection,Service.BIND_AUTO_CREATE); } //点击登录 public void login(View view){ String number=et_main_number.getText().toString(); String pwd=et_main_pwd.getText().toString(); boolean falg=false; try { Map map=new HashMap(); map.put("number",number); map.put("pwd",pwd); QQUser qqUser=qqLoginInterfaceOut.Login2(map); Log.i("text","绑定成功"+qqUser.getQqName()); } catch (RemoteException e) { e.printStackTrace(); } }
QQLoginService.java 继承Service代码如下:
class MyBinder extends QQLoginInterfaceOut.Stub{ @Override public boolean login(String number, String pwd) throws RemoteException { if ("10000".equals(number)&&"123456".equals(pwd)){ return true; } return false; } @Override public QQUser Login2(Map map) throws RemoteException { String number=map.get("number").toString(); String pwd=map.get("pwd").toString(); if ("10000".equals(number)&&"123456".equals(pwd)){ QQUser qqUser=new QQUser("你是谁",pwd,number,"男"); return qqUser; } return null; } } @Nullable @Override public IBinder onBind(Intent intent) { Log.i("text","onBind"); return new MyBinder(); }}
QQLoginInterface.java借口:
public boolean login(String number,String pwd); public QQUser Login2(Map<String,Object> map);
QQUser.java是一个实体类的属性为:
private String qqName; private String qqPwd; private String qqNumber; private String qqSex;
创建了两个aidl(每建一个aidl就要重新再编译一下否则有一些东西出不来)
QQLoginInterfaceOut.aidl
package zking.com.android_23;import zking.com.android_23.QQUser;interface QQLoginInterfaceOut { boolean login(String number, String pwd) ; QQUser Login2(in Map map);}
QQUser.aidl
package zking.com.android_23;import zking.com.android_23.QQUser;//定义一个对象parcelable QQUser;
另一个进程要用到上面的那个进程中的QQLoginInterfaceOut是要重新编译好的还有一个实体类:
在Mainactivty.java中主要是这些:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_main_number = (EditText) findViewById(R.id.et_main_number); et_main_pwd = (EditText) findViewById(R.id.et_main_pwd); intent = new Intent(); ComponentName componentName=new ComponentName("zking.com.android_23","zking.com.android_23.QQLoginService"); //应用程序的包名(zking.com.android_23) 要启动的类(zking.com.android_23.QQLoginService) intent.setComponent(componentName); //显示 Intent(2种) //隐世 Intent// 多进程间启动Services// Android 5.0 之后,启动其他应用程序的服务,不允许使用隐式 } ServiceConnection connection= new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { qqLoginInterfaceOut = QQLoginInterfaceOut.Stub.asInterface(iBinder); } @Override public void onServiceDisconnected(ComponentName componentName) { } }; @Override protected void onResume() { super.onResume(); bindService(intent,connection, Service.BIND_AUTO_CREATE); } public void login(View view){ String number=et_main_number.getText().toString(); String pwd=et_main_pwd.getText().toString(); try { Map map=new HashMap(); map.put("number",number); map.put("pwd",pwd); QQUser qqUser=qqLoginInterfaceOut.Login2(map); Log.i("text",""+qqUser.getQqName()+"____"+qqUser.getQqNumber()); } catch (RemoteException e) { e.printStackTrace(); } }
0 0
- 服务(service)-----远程服务
- android远程服务service
- Service之《远程服务》
- Service (aidl远程服务)
- Android Service 远程服务
- Service(远程服务)
- Android Service -远程服务
- Service(远程服务)
- 简单的远程服务Service
- 48.android服务service-启动远程服务
- Android中的服务(service)--AIDL远程服务
- android之服务service远程服务
- android之服务service远程服务
- android之服务service远程服务
- Android_Service(2)前台服务(service)和远程服务(service)
- 服务Service之绑定服务(远程服务)
- service(二) Android Studio 编写远程服务
- Remote Access Service (RAS)远程访问服务
- Ubuntu14.04lts wifi连接不稳定问题
- POJ 3693 Maximum repetition substring (后缀数组+RMQ 求重复最多的连续子串)
- 机器视觉之镜头景深概念与计算
- 链表:自引用结构
- 面试题4
- Service(远程服务)
- Glide-入门教程
- MyEclipse汉字乱码问题
- poj 1611 并查集
- 树状数组(二)与poj2155
- AlertDialog对话框的简单使用
- MacOS不可或缺的套件管理工具---Homebrew
- android开发第一弹:短信SMS
- 工控安全漏洞举例