Android四大组件之Service
来源:互联网 发布:跑步记录软件 编辑:程序博客网 时间:2024/06/04 19:18
服务的特点是可以长期后台运行,一般没有应用程序界面,不容易被系统回收,即使被回收当内存足够时还会复活。当我们需要某些程序一直在后台运行时就用到了service。
1. Service的两种开启方式
1)用startService的方式开启服务:
startService---stopService
Oncreate()--> onStartCommand() --> ondestroy()
1.如果服务已经被创建,就不会再去执行oncreate方法了。
2.多次的开启服务只会执行 onStartCommand()
3.服务只能够被销毁一次,不能够被重复的销毁.
2)用bindService的方式开启服务:
bindService---unbindService
onCreate()-->onbind()-->onUnbind()-->ondestroy();
1. 如果服务被绑定了,并且没有解绑,服务就不会停止了。(停止不了了)
2. 如果服务被采用start的方式开启过,并且没有stop过,采用unbind服务, 不会让服务停止。
2. 编写一个Service
1.写个类 去继承 Service
publicclass HelloServiceextends Service {
2.重新 onCreate方法, 然后在oncreate方法中实现业务逻辑代码
这里实现的功能, 一般都是需要在后台一直 长期的运行的事儿.
例如:下载,放音乐,
3.服务写好了之后,需要到清单文件中进行注册.
<!-- 注册服务 -->
<service android:name="com.itheima.service.quickstart.HelloService"></service>
注意:服务也是运行在主线程中,服务不能够被阻塞. 如果要干耗时的事儿.那么也需要放到
子线程中去.
3. 绑定一个Service
只有绑定一个服务,才能调用该服务中的方法.
第一步:
编写服务类
publicclass LocalServiceextends Service
第二步:
声明接口,在这个接口中声明一个方法.
publicinterface Ibinder {
public void callMethodInService(String account,int money);
}
第三步:
声明MyBinder类,记得将小MyBinder 私有,然后让MyBinder去继承 Binder,实现
Ibinder接口.
privateclass MyBinder extendsBinderimplements Ibinder {
@Override
public void callMethodInService(String account,int money) {
//调用服务中的方法
methodInService(account, money);
}
第四步:
在onBind方法中 returnMyBinder的实例
@Override
public IBinder onBind(Intent intent) {
System.out.println("服务绑定了...");
//需要返回 IBinder的实例对象
return new MyBinder ();
}
第五步:
绑定服务调用服务中的方法
Intent intent =new Intent();
intent.setClass(this, LocalService.class);
conn = new MyServiceConnection();
bindService(intent,conn,BIND_AUTO_CREATE);
第六步:
private class MyServiceConnection implements ServiceConnection{
@Override
public void onServiceConnected(ComponentName name, IBinderservice) {
MyBinder = (Ibinder ) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
第七步:
//调用服务中的方法
public void callService(View v){
MyBinder .callMethodInService("lulu", 666666);
}
第八步:
释放资源
//解绑服务
public void unbindService(View v){
unbindService(conn);
conn=null;
}
第一步:
编写服务类
publicclass LocalServiceextends Service
第二步:
声明接口,在这个接口中声明一个方法.
publicinterface Ibinder {
public void callMethodInService(String account,int money);
}
第三步:
声明MyBinder类,记得将小MyBinder 私有,然后让MyBinder去继承 Binder,实现
Ibinder接口.
privateclass MyBinder extendsBinderimplements Ibinder {
@Override
public void callMethodInService(String account,int money) {
//调用服务中的方法
methodInService(account, money);
}
第四步:
在onBind方法中 returnMyBinder的实例
@Override
public IBinder onBind(Intent intent) {
System.out.println("服务绑定了...");
//需要返回 IBinder的实例对象
return new MyBinder ();
}
第五步:
绑定服务调用服务中的方法
Intent intent =new Intent();
intent.setClass(this, LocalService.class);
conn = new MyServiceConnection();
bindService(intent,conn,BIND_AUTO_CREATE);
第六步:
private class MyServiceConnection implements ServiceConnection{
@Override
public void onServiceConnected(ComponentName name, IBinderservice) {
MyBinder = (Ibinder ) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
第七步:
//调用服务中的方法
public void callService(View v){
MyBinder .callMethodInService("lulu", 666666);
}
第八步:
释放资源
//解绑服务
public void unbindService(View v){
unbindService(conn);
conn=null;
}
- Android四大组件之 Service
- Android四大组件之 Service
- Android四大组件之 Service
- android四大组件之Service
- android四大组件之Service
- android四大组件之Service
- Android四大组件之Service
- Android四大组件之service
- Android四大组件之Service
- Android四大组件之 Service
- Android四大组件之Service
- Android四大组件之Service
- Android四大组件之service
- Android四大组件之Service
- Android四大组件之Service
- android四大组件之Service
- android四大组件之Service
- Android 四大组件之 Service
- 【pta】实验2-1-1 计算摄氏温度
- android-学习-设计小技巧.1
- Unity Shader——Writing Surface Shaders
- windows redis安装
- vim的常用操作
- Android四大组件之Service
- position相关问题的思考
- C++线程类
- 字符类型判断
- scrapy URLerror:<urlopen error [Error 10051]> 问题
- 关闭Tomcat
- sgafhdhdsfhsdfhsdh
- 前后端分离的思考
- 手动更新系统补丁时,windows update一直卡住解决方法