Android中Service的使用

来源:互联网 发布:上海进项发票认证软件 编辑:程序博客网 时间:2024/05/21 22:21

service是运行于后台的一个组件,用来运行适合在后台的代码,它没有前台界面,可视为没有界面的activity。

服务有两种开启方式:startService()方法和bindService()方法。

startService方法启动的服务进程属于服务进程,在activity中启动的服务进程与activity是否存在无关。

bindService方法启动的服务进程通过ServiceConnection接口与activity绑定在一起,它不属于服务进程,activity一旦死亡,service也跟着死亡。

代码如下:

//MyService.java

public class MyService extends Service {
//绑定时调用
@Nullable
@Override
public IBinder onBind(Intent intent) {
//返回一个Binder对象
return new MyBinder();
}
//定义一个BInder,通过onBind返回给activity
class MyBinder extends Binder {
}
//解绑时调用
@Override
public void unbindService(ServiceConnection conn) {
super.unbindService(conn);
}
//服务创建时被调用
@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();
}
}

//MainActivity.java

public class MainActivity extends AppCompatActivity {
private Intent intent;
private MyServiceConn conn;
private MyService.MyBinder myBinder;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
intent = new Intent(this, MyService.class);
conn = new MyServiceConn();
}
public void start(View view) {
startService(intent);
}
public void stop(View view) {
stopService(intent);
}
public void bind(View view) {
bindService(intent, conn, BIND_AUTO_CREATE);
}
class MyServiceConn implements ServiceConnection {
//服务成功连接时调用
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
//得到Service中的Binder对象,通过Binder对象来操纵service
myBinder = (MyService.MyBinder) iBinder;
}
//服务失去连接时调用
@Override
public void onServiceDisconnected(ComponentName componentName) {
}
}
public void unBind(View view) {
unbindService(conn);
}
}

服务分为本地服务和远程服务。

本地服务指的是服务和启动服务的activity在同一个进程中。

远程服务指的是服务和启动服务的activity不在同一个进程中。

0 0