付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】AndroidService详解(三)AIDL使用解析
aidl是AndroidInterfacedefinitionlanguage的缩写,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口。
通过aidl我们可以完成从服务端到客户端的数据通信
在aidl中我们可以声明任意多个方法,除了内建类型(intboolean等)都需要导入,规则如下:
1、Java原始类型不需要导入。
2、String、Lsit、Map和CharSequence不需要导入。
创建aidl文件,New->file->文件名.aidl,添加如下代码:package
com.example.new1;
interface
INewService
{
void
setAge(int
age);
int
getAge();
void
setName(String
name);
String
getName();
}点击保存,刷新工程,会在gen下自动产生java代码。(产生的代码有时候没有缩进,可以右键->Source->Format进行设置)
在生成的代码中又一个Stud类,他继承于IBinder。可以把它作为Service的onBind的返回值,一旦这个Service被其他程序的服务绑定,就将这个IBinder类实例发送出去,同样这个实例里重写的方法数据也跟着一起发送出去。新建一个Servers,命名为NewService.java里面声明一个Stub类,完成上面定义的四个函数,代码如下:package
com.example.new1;
import
com.example.new1.INewService.Stub;
import
android.app.Service;
import
android.content.Intent;
import
android.os.Bundle;
import
android.os.IBinder;
import
android.os.RemoteException;
import
android.util.Log;
import
android.widget.Toast;
public
class
NewService
extends
Service
{
private
String
name="";
private
int
age=18;
@Override
public
IBinder
onBind(Intent
arg0)
{
//
TODO
Auto-generated
method
stub
Toast.makeText(NewService.this,
"onBind",
Toast.LENGTH_LONG).show();
Log.i("SERVICE","onbind");
return
mbinder;
//返回接口
}
public
void
onCreate()
{
super.onCreate();
Log.i("SERVICE","oncreat");
}
public
void
onStart(Intent
intent,int
startId)
{
Log.i("SERVICE","onstart");
}
public
void
onDestroy()
{
Log.i("SERVICE","ondestory");
}
private
INewService.Stub
mbinder
=
new
Stub()
{
@Override
//实现接口定义的函数
public
void
setAge(int
age)
throws
RemoteException
{
//
TODO
Auto-generated
method
stub
NewService.this.age
=
age;
}
@Override
public
int
getAge()
throws
RemoteException
{
//
TODO
Auto-generated
method
stub
return
NewService.this.age;
}
@Override
public
void
setName(String
name)
throws
RemoteException
{
//
TODO
Auto-generated
method
stub
NewS=name;
}
@Override
public
String
getName()
throws
RemoteException
{
//
TODO
Auto-generated
method
stub
return
NewS;
}
};
}
到目前为止,已经实现了接口中的全部函数,下面,将实现客户端的调用:新建一个Activity.java,代码如下:package
com.example.new1;
import
android.app.Activity;
import
android.app.ActionBar;
import
android.app.Fragment;
import
android.content.ComponentName;
import
android.content.Intent;
import
android.content.ServiceConnection;
import
android.os.Bundle;
import
android.os.IBinder;
import
android.os.RemoteException;
import
android.util.Log;
import
android.view.LayoutInflater;
import
android.view.Menu;
import
android.view.MenuItem;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.view.ViewGroup;
import
android.widget.Button;
import
android.widget.EditText;
import
android.widget.TextView;
import
android.widget.Toast;
import
android.os.Build;
public
class
MainActivity
extends
Activity
{
private
TextView
textview;
private
INewService
inewservice;//声明接口
private
ServiceConnection
conn=new
ServiceConnection()
{
@Override
public
void
onServiceConnected(ComponentName
arg0,
IBinder
arg1)
{
//
TODO
Auto-generated
method
stub
inewservice
=
INewService.Stub.asInterface(arg1);//获得接口
try
{
inewservice.setName("我是Activity");
//调用函数
inewservice.setAge(25);
textview.setText(inewservice.getName()+inewservice.getAge());
}
catch
(RemoteException
e)
{
//
TODO
Auto-generated
catch
block
e.printStackTrace();
}
Log.i("SERVICE","success"
);
}
@Override
public
void
onServiceDisconnected(ComponentName
arg0)
{
//
TODO
Auto-generated
method
stub
Log.i("SERVICE","errer");
}
};
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button
button1=(Button)this.findViewById(R.id.btn1);
textview=(TextView)this.findViewById(R.id.mytext1);
button1.setOnClickListener(new
OnClickListener()
{
@Override
public
void
onClick(View
arg0)
{
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职业技能大赛综合提升活动方案
- 会议记录模板高效记录要点
- 3.3 数据的备份与恢复教学设计高中信息技术粤教版2019选修3 数据管理与分析-粤教版2019
- 2025-2026学年积极的情绪教学设计
- 2025-2026学年带教学设计英语高中
- 2025-2026学年绿叶与枯叶教案
- 2025-2026学年网店运营项目制教学设计
- 2025-2026学年马匹的拼音教学设计英语
- 2025-2026学年单元教学设计模版
- 工程临建合同模板(3篇)
- 旋喷桩施工安全培训课件
- 2025年公安机关人民警察职位招录考试专业科目模拟题及解析
- 公安执法规范教学课件
- 内蒙古建筑职业技术学院单招数学题库及参考答案详解(综合卷)
- 医院处方点评规范
- 国家自然博物馆试题带答案
- 制造车间人员组织计划
- 氢气安全使用课件
- 急性喉梗阻诊疗与急救处理
- T/BIKE 7.3-2020电动自行车锂离子蓄电池换电柜技术要求第3部分:通信协议
- 2024-2025学年辽宁省普名校联盟高二下学期3月月考生物试题(解析版)
评论
0/150
提交评论