此篇讲述Service的详细使用demo
1.清单文件里 注册 服务
<service
android:name="com.finddreams.runningman.MyService" >
</service>
2.java代码中服务的实现类
package com.finddreams.runningman;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
/**
* 服务
* */
public class MyService extends Service{
@Override
public void onCreate() {
super.onCreate();
Log.d("MyService", "MyService----onCreate方法!!!!!!!!!!!");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("MyService", "MyService----onStartCommand方法!!!!!!!!!!!!!!!!!!");
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent arg0) {
Log.d("MyService", "MyService----onBind方法!!!!!!!!!!!!!!!!!!!!!");
return new Mybinders();
}
@Override
public boolean onUnbind(Intent intent) {
Log.d("MyService", "MyService----onUnbind方法!!!!!!!!!!!!!!!!!!!!!");
return super.onUnbind(intent);
}
@Override
public void onRebind(Intent intent) {
super.onRebind(intent);
Log.d("MyService", "MyService----onRebind方法!!!!!!!!!!!!!!!!!!!!!");
}
class Mybinders extends Binder{
public void start(){
Log.d("MyService", "Mybinders里执行方法!!!!!!!!!!!!!!");
}
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("MyService", "MyService----onDestroy方法!!!!!!!!!!!!!!!!!!!!!!!");
}
}
3.java代码中启动服务
3.1.启动式方式
/**
* 启动式开启服务
* */
public void showserdialog(View v){
Intent startIntent=new Intent(this, MyService.class);
startService(startIntent);
}
/**
* 启动式停止服务
* */
public void showserdialogs(View v){
Intent stopIntent=new Intent(this, MyService.class);
stopService(stopIntent);
}
3.2.生命周期
onCreate()->onStartCommand()(服务第一次执行)
onStartCommand()(服务不是第一次执行)
onBind()方法不执行
3.3.总结
使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了服务仍然运行(只要不执行stopService(stopIntent)方法)。
4.1.绑定式启动
/**
* 绑定式开启服务
* */
public void showserdialogss(View v){
Intent bindIntent=new Intent(this, MyService.class);
bindService(bindIntent, conn, BIND_AUTO_CREATE);
}
/**
* 绑定式停止服务
* */
public void showserdialogsss(View v){
unbindService(conn);
}
4.2.绑定式时 三个参数
bindService(service, conn, flags)
unbindService(conn);
参数1:Intent对象
Intent bindIntent=new Intent(this, MyService.class);
参数2:ServiceConnection接口
private class MyServiceConnection implements ServiceConnection{
@Override
public void onServiceConnected(ComponentName arg0, IBinder arg1) {
myBinder=(Mybinders) arg1;
myBinder.start();
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
}
}
参数3:int flags
参数 flags的值有如下情况:
1.public static final int BIND_AUTO_CREATE
表明只要绑定存在,就自动建立 Service;同时也告知Android系统,这个Service的重要程度与调用者相同, 除非考虑终止调用者,否则不要关闭这个Service
2.public static final int BIND_DEBUG_UNBIND
3.public static final int BIND_NOT_FOREGROUND
4.public static final int BIND_ABOVE_CLIENT
5.public static final int BIND_WAIVE_PRIORITY
一般使用第一个即可
注意
1.Service(服务) 是Android四大组件之一 运行在UI线程
2.和activity一样需要注册
3.有生命周期
3.1.启动式服务生命周期
onCreate()->onStartCommand()(服务第一次执行)
onStartCommand()(服务不是第一次执行)
onBind()方法不执行
3.2.绑定式生命周期
onCreate()->onBind()(服务第一次执行)
onBind()(服务不是第一次执行)
onStartCommand()方法不执行
4.不可做耗时操作(15s ANR)