一.什么是Service
service是四大组件之一,在后台运行,多用来在后台执行耗时操作,Servie是运行在主线程中都
二.建立Service
<service
android:name="com.hezhong.service.MyService"
android:enabled="true"
android:exported="false"></service>
public class MyService extends Service {
private static final String TAG = MyService.class.getSimpleName();
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "onBind");
return new MyBinder();
}
@Override
public void unbindService(ServiceConnection conn) {
super.unbindService(conn);
Log.d(TAG, "unBind");
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy");
super.onDestroy();
}
class MyBinder extends Binder {
public void startDownload() {
Log.d(TAG, "startDownload");
}
}
}
需要继承Binder去实现自定义功能
三.Activity调用Service
final Intent intent = new Intent(LauncherActivity.this, MyService.class);
findViewById(R.id.btn_1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startService(intent); //启动Service
}
});
findViewById(R.id.btn_2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(intent); //停止Service
}
});
findViewById(R.id.btn_3).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bindService(intent, connection, BIND_AUTO_CREATE);//绑定Service
}
});
findViewById(R.id.btn_4).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
unbindService(connection);//解绑Service
}
});
ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d(TAG, "onServiceConnected");
MyService.MyBinder myBinder = (MyService.MyBinder) service;
myBinder.startDownload();
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.d(TAG, "onServiceDisConnected");
}
};
执行startService,生命周期是onCreate,onStartCommand
执行stopService,生命周期是onDestory
执行bindService,生命周期是onCreate,onBind
执行unBindService,生命周期是onDestory
只执行stopServie,不执行startService,Service无响应
只执行unBindService,不执行bindService,Service因为没有绑定崩溃
都执行了startServie和bindService,然后只执行stopServie或者unBindServie,程序都无响应,只有都调用完了stopServie和unBindServie才调用onDestory