主要是一个长时间的后台操作,但是不会提供一个UI界面。
打开或者关闭应用,服务也不会关闭。
有启动式服务和绑定式服务
<service android:name=".myservice"></service>
</application>
启动式服务
--------------------------------------------------------------------------------------------------------------
首先 新建一个类 继承 Service
public class myservice extends Service {
}
覆盖实现
onCreate 数据初始化 创建后只会执行一次
onStartCommand 再次创建会重复执行
onDestroy 资源回收
在 <application> 中加入
<service android:name=".myservice"></service>
生命周期是 onCreate onStartCommand onDestroy
Intent i=new Intent(MainActivity.this, myservice.class);
startService(i); 来启动服务
Intent i=new Intent(MainActivity.this, myservice.class);
stopService(i); 来关闭服务
类本身可以调用 stopself()停止服务
也可以intent传入参数 在onStartCommand里获取
Service运行在主线程。 在里面执行操作需要在新开线程。
//获得文件路径
File file=Environment.getExternalStorageDirectory();
//判断sdk是否挂载
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
}
HttpClient.getConnectionManager().shutdown();结束后关闭连接
IntentService
同上继承IntentService的类
实现OnHandleIntent方法 主题内容
1 不需要开线程 (自己就开启了一个新线程)
2 不需要关闭,它自己关闭
3 适合一个单线程下载数据
绑定式服务
-----------------------------------------------------------------------------------------------
先继承Service
现实覆盖方法IBinder 在返回Bind对象 在类的内部新建一个LocalBinder继承Bind类做为返回值 然后把本身返回回去
public class myservice extends Service {
private Binder Bind=new LocalBinder(); //新建一个类 座位返回值
@Override
public IBinder onBind(Intent arg0) {
return Bind; //返回
}
//客户端调用
public int add(int i,int k){
return i+k;
}
public class LocalBinder extends Binder{
//返回实例给客户端调用
public myservice getMyservice(){
return myservice.this; //把本类回返
}
}
}
在avciti 建立ServiceConnection 并实现2个内部方法
private myservice myservice100;
private ServiceConnection Connection =new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// 链接断开
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// 开始链接
LocalBinder b=(LocalBinder)service;
myservice100=b.getMyservice();
}
};
绑定
Intent i=new Intent(MainActivity.this, myservice.class);
bindService(i, Connection, Context.BIND_AUTO_CREATE);
接触绑定
unbindService(Connection);
调用
int s=myservice100.add_num(1,6);
-----service--------thread--------------------------------------------
service是在后台运行的,切换至其它APP时,只要不销毁启动service的Activity,service会一直运行。
多线程是跟主线程同时运行的,主线程Activiy切换时,这些线程都会停止运行