android Activity绑定Service
activity可以绑定Service,并且可以调用Service中定义的方法
Service代码:在里面多了一个IBinder;个人理解是用来与Activity绑定的主要通道;
public class MainServer extends Service {
private final String TAG = "Service------->";
private final IBinder binder = new MyBinder(); //绑定器
public class MyBinder extends Binder {
public MainServer getService() {
return MainServer.this; //返回本服务
}
}
/** 绑定时执行 */
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG, "onBind()");
return binder;
}
/** 只在创建时执行一次 */
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG, "onCreate()");
}
/** 断开绑定或者停止服务时执行 */
@Override
public void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy()");
}
/** 当内存不够是执行该方法 */
@Override
public void onLowMemory() {
super.onLowMemory();
Log.i(TAG, "onLowMemory()");
onDestroy();
}
/** 当从新绑定是执行 */
@Override
public void onRebind(Intent intent) {
// TODO Auto-generated method stub
super.onRebind(intent);
Log.i(TAG, "onRebind()");
}
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
Log.i(TAG, "onStart()");
}
/** 每次执行Service都会执行该方法 */
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand --->flags = " + flags + " startId = " + startId);
con = new Connect();
con.start();
return super.onStartCommand(intent, flags, startId);
}
/** 断开绑定是执行 */
@Override
public boolean onUnbind(Intent intent) {
Log.i(TAG, "onUnbind()");
return super.onUnbind(intent);
}
MainActivity代码: 必须声明实例ServiceConnection,并且在绑定成功后获取到Service,用以调用Service的方法
public class MainActivity extends Activity {
private MainServer mainService;
//绑定Service监听
ServiceConnection sconnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i("activity---->", "已断开Service");
}
/**当绑定时执行*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
Log.i("activity---->", "已绑定到Service");
mainService = ((MainServer.MyBinder)service).getService();
Intent i = new Intent();
mainService.onStartCommand(i, 0, 0); //绑定成功后可以调用Service方法,此处等与是启动Service
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button start = (Button)findViewById(R.id.start);
Button stop = (Button)findViewById(R.id.stop);
Button send = (Button)findViewById(R.id.send);
Button skip = (Button)findViewById(R.id.skip);
start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent bind = new Intent(MainActivity.this,MainServer.class);
bindService(bind, sconnection, Context.BIND_AUTO_CREATE);
}
});
stop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
unbindService(sconnection);
}
});
android Activity绑定Service的更多相关文章
- Tabhost中Activity绑定Service
在android中,一个Activity绑定一个Service组件我们一般用Context().bindService方法就能够.可是假设这个 Activity属于一个Tabhost的话就不行了,在网 ...
- Android Activity与Service的交互方式
参考: http://blog.csdn.net/gebitan505/article/details/18151203 实现更新下载进度的功能 1. 通过广播交互 Server端将目前的下载进度,通 ...
- Android Activity、Service、BroadcastReceiver 的生命周期
Activity.Service.BroadcastReceiver这三个组建是Android开发中最常使用到的组件,在它们的生命周期的各个阶段我们需要针对性的做些事情,了解这些组件的生命周期有利于我 ...
- Android——Activity and Service
参考博客:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html http://www.cnblogs.com/feisky/ar ...
- android学习-IPC机制之ACtivity绑定Service通信
bindService获得Service的binder对象对服务进行操作 Binder通信过程类似于TCP/IP服务连接过程binder四大架构Server(服务器),Client(客户端),Serv ...
- Android activity和service的生命周期对比
1Activity生命周期 七个方法 1. void onCreate(Bundle savedInstanceState) 当Activity被第首次加载时执行.我们新启动一个程序的时候其主窗体的o ...
- Activity与Service通信(不同进程之间)
使用Messenger 上面的方法只能在同一个进程里才能用,如果要与另外一个进程的Service进行通信,则可以用Messenger. 其实实现IPC(Inter-Process Communicat ...
- Activity与Service通信的方式有三种:
在博客园看到的,看着挺不错的,借来分享下 继承Binder类 这个方式仅仅有当你的Acitivity和Service处于同一个Application和进程时,才干够用,比方你后台有一个播放背景音乐的S ...
- Activity与Service通信
Activity与Service通信的方式有三种: 继承Binder类 这个方式只有当你的Acitivity和Service处于同一个Application和进程时,才可以用,比如你后台有一个播放背景 ...
随机推荐
- win8提升winform软件的权限
在win8系统中,微软提高了系统盘文件的权限,提高了其他系统操作的权限,因此一些桌面应用程序在运行时会报一些权限错误,比如C盘文件操作权限,或注册表操作无权限等. 我之前开发过一款用笔记本一键架设无线 ...
- asp.net 手工调用 WS(Get)方法:
asp.net 手工调用 WS(Get)方法: 通过手工HttpWebRequest,HttpWebResponse来模拟调用.核心代码:string strurl="http://loca ...
- JQuery -- this 和 $(this) 的区别
this和$(this)都是指的调用它的东西,但this是一个Html 元素,例如给img标签设置src属性可以这样写 this.src= "test.jpg"; 但是如果将thi ...
- css狂记
接着上一篇 html狂记,同样是DIV+CSS传统站点开发,同样只是收集.整理... CSS 背景属性(Background) 属性 描述 CSS background 在一个声明中设置所有的背景属性 ...
- iOS 代码控制iPhone&iPad旋转
在APPDelegate中添加如下代码 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo } p.p2 { margin ...
- 简单的java socket 示例
一.搭建服务器端 a).创建ServerSocket对象绑定监听端口. b).通过accept()方法监听客户端的请求. c).建立连接后,通过输入输出流读取客户端发送的请求信息. d).通过输出流向 ...
- 洛谷P3370 【模板】字符串哈希
P3370 [模板]字符串哈希 143通过 483提交 题目提供者HansBug 标签 难度普及- 提交 讨论 题解 最新讨论 看不出来,这题哪里是哈希了- 题目描述 如题,给定N个字符串(第i个 ...
- okhttp3 post 数据打包方法
import okhttp3.OkHttpClient; import okhttp3.FormBody; import okhttp3.Request; import okhttp3.Request ...
- 【SSM 8】spring集成Mybatis通用Mapper
上篇博客中介绍了关于Mybatis底层封装的思路问题,那么这篇博客,就介绍一下怎么引入通用的mapper插件. 备注:本项目通过maven管理 关键版本说明: spring:4.1.3.RELEASE ...
- I/O系统 (输入/输出)
I/O系统 1:流: (1)判断到底是输入,还是输出:永远站在程序的立场上: (2)判断传递的到底是字节还是字符,从而决定管道的粗细: 字节管道可以传递所有数据,字符管道专门用来传递文本数据(1个字符 ...