第8章 Service基础Activity与Service绑定
要知道如果调用函数startService方法,那么即使你的程序退出了,但是Service依然运行在后台;也就是说此时想要停止service必须调用stopService方法。
现在我们把Activity与Service绑定在一起,那就是Service要随着程序的退出而终止,此时调用的方法为bindService方法,方法如下:
A. 编写需要运行在后台的类继承自android.app.Service。
public class MyService extends Service {
//服务生命周期 创建,开始,销毁
/**
* 创建
*/
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.d("info", "Service Create");
}
/*
* 开始
* (non-Javadoc)
* @see android.app.Service#onStart(android.content.Intent, int)
*/
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
Log.d("info", "Service Start");
}
/**
* 销毁
*/
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.d("info", "Service Destroy");
}
/**
* 当Service与Activity成功绑定时调用这个方法(non-Javadoc)
* @see android.app.Service#onBind(android.content.Intent)
*/
@Override
public IBinder onBind(Intent arg0) {
Log.d("info","Service Bind Success");
return null;
}
/**
* 重新绑定
*/
@Override
public void onRebind(Intent intent) {
super.onRebind(intent);
Log.d("info","Service ReBind Success");
}
/**
* 取消绑定
*/
@Override
public boolean onUnbind(Intent intent) {
Log.d("info","Service Unbind Success");
return super.onUnbind(intent);
}
}
B. 在AndroidManifest.xml中配置<service>标签
<service android:name=".MyService" android:enabled="true" ></service>
C. 绑定服务:
(1) 通过使用Activity的bindService(Intent service,ServiceConnection conn,int flags)完成
由该方法的第二个参数可以确定第二步要做什么
(2) 编写类实现ServiceConnection 接口
class MyServiceConnection implements ServiceConnection
{
@Override
public void onServiceConnected(ComponentName arg0, IBinder arg1) {
Log.d("info", "Service Connection Success");
//成功连接服务,该方法被执行。在该方法中可以通过IBinder对象取得onBind方法的返回值,一般通过向下转型
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
// TODO Auto-generated method stub
Log.d("info", "Service Connection Filed");
//连接失败执行
}
}
(3)使用
class BtnClick implements OnClickListener
{
@Override
public void onClick(View arg0) {
Intent intent = new Intent(Main.this,MyService.class);
MyServiceConnection myServiceConnection = new MyServiceConnection();
switch (arg0.getId()) {
case R.id.btnStart:
Main.this.startService(intent);
break;
case R.id.btnStop:
Main.this.stopService(intent);
break;
case R.id.btnBind:
Main.this.bindService(intent,myServiceConnection ,Context.BIND_AUTO_CREATE);
break;
case R.id.btnUnBind:
//ServiceConnection必须是全局变量否则此处报错
Main.this.unbindService(myServiceConnection );
break;
default:
break;
}
}
}
***开启service有两种方法,一种startService,另一种是bindService。如果两种方法同时使用的话,不论是先启用startService先还是启用bindService先,都需要先等待解除绑定服务再能调用stopService方法,程序才会自动回调destroy。不论是先启用startService先还是启用bindService先,然后再退出程序,以startService启动的服务忍然需要当程序再次启动后调用stopService停止服务。
第8章 Service基础Activity与Service绑定相关推荐
- android activity 通知 service,android activity和service通信问题
首先,题主有个理解错误的地方, startService 只是开启 service ,service运行在后台,还是有可能因内存不足而被杀死. 第二点, service 可以以混合启动的形式启动,也就 ...
- Activity与Service通信
Activity与Service通信 Activity与Service通信的方式有三种: 继承Binder类 这个方式只有当你的Acitivity和Service处于同一个Application和进程 ...
- android 启动服务同时传递数据,Android Studio开发基础之起动Service,并通过从Activity向Service传递数据...
Android Studio开发基础之启动Service,并通过从Activity向Service传递数据 本实例演示启动Service,并通过从Activity向Service传递数据,新建一个Se ...
- 安卓基础巩固(二):四大组件:Activity、Service、Broadcast、Content Provider
文章目录 Activity 生命周期 onCreate和onStart的区别 onPause和onStop的区别 生命周期的变化 Activity的启动 Intent Bundle Activity携 ...
- 【重识云原生】第六章容器基础6.4.9.2节——使用 Service 连接到应用
<重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...
- Android基础再回首——四大组件之Activity、Service俩兄弟
Android基础再回首--四大组件之Activity.Service俩兄弟 偶尔的回首过去,总是有不一样的收获.今天就来回顾下Activity和service吧,不用嫌弃太基础了,打好基础是取得成功 ...
- Android Studio开发基础之启动Service,并通过从Activity向Service传递数据
本实例演示启动Service,并通过从Activity向Service传递数据,新建一个Service,并敲如下代码: package com.example.lhb.startservice;imp ...
- 【重识云原生】第六章容器基础6.4.9.6节——Service 与 Pod 的DNS
1 Service 与 Pod 的 DNS Kubernetes 为 Service 和 Pod 创建 DNS 记录. 你可以使用一致的 DNS 名称而非 IP 地址访问 Service. Kuber ...
- android service交互,Android Activity与Service的交互方式
参考: http://blog.csdn.net/gebitan505/article/details/18151203 实现更新下载进度的功能 1. 通过广播交互 Server端将目前的下载进度,通 ...
最新文章
- 【Shell脚本】逐行处理文本文件
- 怎么将excel中的url批量转化为图片_阿里云+Power BI,轻松实现图片可视化报告(一)...
- !JS实战之随机像素图
- 【大会】5G现象级应用倒计时24个月
- 变换上三角矩阵_关于马尔可夫矩阵的一些个人研究成果、思考过程及相关解释...
- Java多线程编程:变量共享分析(Thread)
- 关于大型网站技术演进的思考(八)--存储的瓶颈终篇(8)
- MATLAB————用reshape()函数将矩阵转换为张量
- cocos2dx飞机大战开发记录(3)
- CISCO 路由器的E1模块配置指南
- HTML5标签canvas制作动画
- 点到直线的距离直线的交点及夹角
- matlab 随机信道,随机空时无线信道模型及Matlab仿真
- 爬取奇迹秀工具箱里面的文本和软件网盘链接
- Touch 电容式触摸按键 触摸按键PCB设计参考
- 统计学习之第三天(可汗学院公开课:统计学)
- excel单元格内容拆分_EXCEL批量拆分单元格,也可以这么快
- Golang sync.Cond 简介与用法
- 量化人才之战如何取胜
- JS实现雪花飘落特效效果