废话
今天我们来学习Service的启动模式
Service的启动模式有两种
startService
bindService
startService
这种模式是启动Service后,Service就会一直运行下去,直到进程被杀死,Service在被启动后,就和启动它的context没有关系了,context不知道Service在干什么,当然,context还可以让它停止,它也可以自己停止
下面就让我们启动一个Service
先创建一个Service
public class MyService extends Service {
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@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();
}
}
然后在主界面通过一个按钮启动Service
mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,MyService.class);
startService(intent);
}
});
这样,Service就启动起来了
我们可以让Service停止
Intent intent=new Intent(MainActivity.this,MyService.class);
stopService(intent);
也可以在Service自己停止
stopSelf();
bindService
这个方式启动的Service可以和启动它的context互动
下面我们来看看如何用bind方式启动Service
我们首先在Service中创建一个自定义的内部类并定义两个方法,然后在IBinder方法中返回自定义的内部类实例
MyService.java
public class MyService extends Service {
private int mData=0;
private MyBinder mMyBinder=new MyBinder();
class MyBinder extends Binder{
public void setData(int data){
mData=data;
}
public int getData(){
return mData;
}
}
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
return mMyBinder;
}
@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();
stopSelf();
}
}
接下来我们在MainActivity中进行如下修改
public class MainActivity extends AppCompatActivity {
private MyService.MyBinder myBinder;
private ServiceConnection connection=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
myBinder=(MyService.MyBinder)iBinder;
myBinder.setData(1);
int data=myBinder.getData();
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
}
};
private static final String TAG = MainActivity.class.getSimpleName();
private Button mBtn;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate");
mBtn = (Button) findViewById(R.id.main_btn);
mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,MyService.class);
bindService(intent,connection,BIND_AUTO_CREATE);
}
});
}
}
这样,我们就完成了Service的绑定
我们也可以解除绑定
unbindService(connection);
今天的学习就到这里,晚安。
网友评论