提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、Service 的启动方式

startservice

startservice的生命周期和activity的生命周期无关,启动一个后台任务,不进行通信,停止服务使用stopservice

startservice生命周期

onCreate

1.如果service没有被创建过,调用startservice 的时候会执行onCreate回调

2.如果service已经在执行,调用startservice则不会执行onCreate

onStartCommand

每次service创建或者运行的时候都会执行

onBind()

Service中的onBind()方法是抽象方法,Service类本身就是抽象类,所以onBind()方法是必须重写的,即使我们用不到。

onDestory()在销毁的时候会执行Service该方法。

bindservice

bindservice的生命周期和activity绑定在一起,会受activity的生命周期的影响,当activity销毁的时候,service也会被销毁,启动一个服务,可以与后台进行数据通信停止服务用unbindservice

bindservice的生命周期和绑定的界面生命周期在一起

service与activity的通信通过创建一个类继承Binder , onBing方法返回实现

startservice同时也bindservce,停止服务的时候stopservice也unbindservice

两种启动模式使用方式

//普通启动方法

startService(intent);

//service的数据交互的绑定方法

bindService(intent, serviceConnection, Service.BIND_AUTO_CREATE);

二、使用步骤 创建service后台服务

public class TestService extends Service {

private String token;

//接口回调的数据

public List data;

//循环状态

boolean flag=true;

//通过创建一个类来继承bind实现后台与前台通信

public class DownloadBinder extends Binder {

public TestService gettestservice(){

return TestService.this;

}

public void startDownload() {

token = SPUtils.getStringFromSP("token");

//耗时操作在子线程中执行

Thread thread = new Thread(){

@Override

public void run() {

//执行耗时代码

while (flag){

try {

//

Map map = new HashMap<>();

map.put("offset", 1);

map.put("limit", 10);

NetUtil22.getInstance().getInfoHavaToken(Constant22.BASE_Abnormal, Abnormal_Info.class, map, token, new NetUtil22.NetCallBack() {

@Override

public void onSuccess(Object o) {

//请求到数据之后

if(o instanceof Abnormal_Info){

Log.e("Service","后台打印第一条数据:"+((Abnormal_Info) o).getData().getData().get(0).getName());

//接口回调将数据传回去

data = ((Abnormal_Info) o).getData().getData();

ser_callBack.onClick(data);

}

}

@Override

public void onError(String error) {

Log.e("Service","后台的失败信息:"+error);

}

});

sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

super.run();

}

}

};

//开始执行线程

thread.start();

}

}

@Override

public void onCreate() {

Log.e("Service","onCreate");

super.onCreate();

}

@Override

public IBinder onBind(Intent intent) {

Log.e("Service", "onBind");

return new DownloadBinder();

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

Log.e("Service","onStartCommand");

return super.onStartCommand(intent, flags, startId);

}

@Override

public boolean onUnbind(Intent intent) {

Log.e("Service", "onUnbind");

return super.onUnbind(intent);

}

@Override

public void onDestroy() {

Log.e("Service","onDestroy");

flag=false;

super.onDestroy();

}

//接口回调

public interface Ser_CallBack{

void onClick(List data);

}

public Ser_CallBack ser_callBack;

public void setSer_callBack(Ser_CallBack ser_callBack){

this.ser_callBack=ser_callBack;

}

}

1. 主页面代码

//连接service类

intent = new Intent(this, TestService.class);

2.主页面代码 连接service服务,获取后台数据,完成前台后台数据交互

serviceConnection = new ServiceConnection() {

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

TestService.DownloadBinder binder = (TestService.DownloadBinder) service;

binder.startDownload();

binder.gettestservice().setSer_callBack(new TestService.Ser_CallBack() {

@Override

public void onClick(List data) {

Log.e("Service","前台打印的第一个数据"+data.get(0).getName());

testHomeText.setText(data.get(0).getName());

}

});

}

@Override

public void onServiceDisconnected(ComponentName name) {

}

};

3. 别忘了Service 需要在manifest中注册

总结 点个赞呗