Activity数据传输到服务
activity数据接口负责启动该服务包。service获取数据。手术。
详细demo如下面:
package com.example.android_service_trance; import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcel;
import android.os.RemoteException;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView; import com.example.android_service_trance.MyService.LocalBinder; @SuppressLint("Recycle")
public class MainActivity extends Activity { private Button bindService=null;
private Button callService=null;
private Button communicationService=null;
private TextView tv=null;
private boolean flag=false;//默觉得不绑定
private MyService myService=null;
private LocalBinder binder;//服务里的对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindService=(Button)this.findViewById(R.id.button1);
callService=(Button)this.findViewById(R.id.button2);
communicationService=(Button)this.findViewById(R.id.button3);
tv=(TextView)this.findViewById(R.id.textView1);
bindService.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) { //获得意图
Intent intent=new Intent(MainActivity.this,MyService.class);
//绑定服务
bindService(intent, connection, Context.BIND_AUTO_CREATE); }
});
callService.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
if(flag){
int result=myService.getRandom();
tv.setText("<<<<<<<<"+result);
} }
});
communicationService.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
//往service中传递值的对象
Parcel data=Parcel.obtain();
data.writeInt(10086);
data.writeString("李华");
Parcel reply=Parcel.obtain();
try { binder.transact(IBinder.LAST_CALL_TRANSACTION, data, reply, 0);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//从service里读数据
Log.i("Main<<<<<<<<",reply.readString());
Log.i("Main<<<<<<<<<",reply.readInt()+"");
}
}); } //解除绑定
@Override
protected void onStop() { super.onStop();
if(flag)
{
//解除绑定
unbindService(connection);
flag=false;
}
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} //连接activity和service的桥梁
private ServiceConnection connection=new ServiceConnection(){ @Override
public void onServiceConnected(ComponentName arg0, IBinder iBinder) {
//连接 //获得LocalBinder
binder=(LocalBinder)iBinder;
//获得MyService实例
myService=binder.getService(); flag=true; } @Override
public void onServiceDisconnected(ComponentName arg0) {
//不连接 flag=false; }}; }
service端:
/**
*Version:
*author:YangQuanqing
*Data:
*/
package com.example.android_service_trance; import java.util.Random; import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.os.Parcel;
import android.os.RemoteException;
import android.util.Log; /**
* @author YangQuanqing yqq
*
*/
public class MyService extends Service { //定义一个随机数用于測试
private Random random=new Random();
private LocalBinder lb=new LocalBinder();
//获得当前类的实例
public class LocalBinder extends Binder{ public MyService getService()
{
return MyService.this;
} @Override
protected boolean onTransact(int code, Parcel data, Parcel reply,
int flags) throws RemoteException {
//Activity里获取数据
Log.i("SERVICE<<<<<<<<",data.readString());
Log.i("SERVICE<<<<<<<<<",data.readInt()+"");
reply.writeString("小名");
reply.writeInt(1990); return super.onTransact(code, data, reply, flags);
} } @Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
} @Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
} @Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return lb;
}
//获得一个随机数
public int getRandom()
{ return random.nextInt(22);
} }
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Activity数据传输到服务的更多相关文章
- Activity与WindowManagerService服务的连接过程分析
Activity组件与WindowManagerService服务之间的连接模型如下图所示: 1. Activity组件 -> WindowManagerService的连接 Activity会 ...
- Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8577789 在Android系统中,Activ ...
- Android开发学习—— Service 服务
Service运行于后台的一个组件,用来运行适合运行在后台的代码,服务是没有前台界面,可以视为没有界面的activity. 服务可以被手动关闭,不会重启,但是如果被自动关闭,内存充足就会重启. sta ...
- Android 面试题--Activity
1.什么是 Activity?Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供,BroadcastR ...
- Activity详解生命周期(Android)
Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)之 ...
- Android的四大组件之Activity
Android的四大组件之Activity Activity:是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,B ...
- android之服务
android中的进程优先级 前台进程 拥有一个正在与用户交互的Activity(onResume方法被调用) 与一个前台Activity绑定的服务 服务调用了startForeground onCr ...
- Apache Thrift 服务开发框架学习记录
Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架. 前言: 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Servic ...
- android 一个简单的服务例子
public class MessageService extends Service { // 获取消息线程 private MessageThread messageThread = null; ...
随机推荐
- 基于visual Studio2013解决C语言竞赛题之1020订票
题目 解决代码及点评 /* 某航空公司规定:在旅游旺季7─9月份,若订票超过20张,优惠票价的15%,20张以下,优惠5%: 在旅游淡季1─5月.10月.11月份订票超过 ...
- 自定义navigationBar的高度
原来看过一些解决办法,都不太好,最近解决自定义 tab bar的高度的问题,从中受到启发,找到下面的解决办法. 个人觉得和网上找到的其它方法比还是很简洁的. 关键是要调整navBarTransitio ...
- linux环境 :Linux 共享库LIBRARY_PATH, LD_LIBRARY_PATH 与ld.so.conf
参考: 1. Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径.(该路径在默 ...
- Eclipse用法和技巧五:生成说明文档2
上面一篇文章里面我们介绍了一种生成可以被JDK提取到,生成JavaDoc的添加注释方法.下面再补充一种生成这种注释的方法,上图: 步骤一:光标移动到需要添加注释的语句旁边,快捷键:shift + al ...
- java 中通过label跳出双重for 循环
java 中如何跳出双重for 循环 java跳出循环是使用break语句的,break默认跳出当前循环(包括for循环.while循环),当使用双层循环时,可通过label从内层循环跳出.有关对比的 ...
- Datatable.Compute小技巧
在个人版机房重构的过程中,大家最发愁的一件事无非就是上下机,结账和报表.那么在结账的过程中,最发愁的是否就数计算日结账单的数据和周结账的数据.还记得在第一遍机房收费系统的过程中用的是for 循环,但是 ...
- EFI/GPT探索(为何win7分区时创建100M隐藏分区)
EFI/GPT探索(为何win7分区时创建100M隐藏分区) 转自 http://blog.tomatoit.net/article.asp?id=348 EFI/GPT是新一代的固件/启动管理技术, ...
- 【ASP.NET Web API教程】4.1 ASP.NET Web API中的路由
原文:[ASP.NET Web API教程]4.1 ASP.NET Web API中的路由 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. ...
- Mac与Window之间的共享文件
Mac访问Window: Finder 菜单 “前往” ,然后“连接服务器”,在服务器地址输入 smb://windows主机名或ip地址/共享名(前提window已设置共享文件) Windows访问 ...
- tbb 线程安全concurrent_queue的性能
tbb实现了线程安全的queue,这样程序员既可以不用和那些lock,mutex,criticalsection打交道,又大大提高性能,太给力了..比较的结果见代码中的注释.结果可以看出代码足足少一半 ...