Android Service详解-启动方式
startService()
使用此方法启动 Service,Service 与调用者无直接关联,即调用者关闭,Service 也不会关闭,不可调用 Service 方法
onCreate() -> onStartCommand() -> onDestroy();
使用 Context.startService() 方法启动 Service , 首次创建会执行 onCreate() 方法,然后调用 onStartCommand() 方法,服务创建后会一直处于运行状态,每个服务只有一个实例,当再次该服务时,会重复调用 onStartCommand() 方法,但不会调用 onCreate() 方法,当调用了 stopService() 或者 stopSelf() 时, 会执行 onDestroy() 方法停止服务
Service 代码
public class MyService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
Activity 代码
public class MainActivity extends Activity {
private Button mBtn_Main;
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtn_Main = findViewById(R.id.btn_main);
mBtn_Main.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MyService.class);
startService(intent);
}
});
}
}
bindService()
使用此方法启动 Service,Service 与调用者有直接关联,即调用者关闭,Service 也会关闭,可调用 Service 方法,一般使用此方式用于和 Activity 进行通信
onCreate() -> onBind() -> onUnbind() -> onDestroy();
使用 Context.bindService() 方法启动 Service , 首次创建会执行 onCreate() 方法,然后调用 onBind(),这时调用者已经和 Service 绑定到一起,如调用者关闭,Service 会执行 onUnbind() 方法,然后执行 onDestroy() 方法,如服务已经绑定,再次调用不会执行绑定方法(即不会执行 onCreate() 和 onBind() 方法),如果想要解除绑定,可执行 unbindService() 方法,Service 会执行 onUnbind() 方法,然后执行 onDestroy() 方法关闭服务
Service 代码
public class MyService extends Service {
public class MyBinder extends Binder{
public MyService getMyService(){
return MyService.this;
}
}
private MyBinder myBinder = new MyBinder();
@Override
public void onCreate() {
super.onCreate();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return myBinder;
}
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
Activity 代码
public class MainActivity extends Activity {
private Button mBtn_Main;
private static final String TAG = "MainActivity";
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
MyService.MyBinder myBinder = (MyService.MyBinder) binder;
MyService myService = myBinder.getMyService();
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.d(TAG, "onServiceDisconnected: ");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtn_Main = findViewById(R.id.btn_main);
mBtn_Main.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MyService.class);
bindService(intent, serviceConnection, BIND_AUTO_CREATE);
}
});
}
}