service服务在应用程序中是一个比较常用的组件,至于service的作用,随便百度一下或者找本android的书都会有介绍。
简单记录下在mono里面的使用。
服务分为两种:本地服务和远程服务
本地服务:应用于程序内部
远程服务:应用于android系统上的应用程序之间;
先看下生命周期,随便从网上找的:
上诉可以看到两者的启动方式还是有一定的差别;
今天记录下本地服务的使用;
一、创建service的子类
public class MyService : Service{
...
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
}
}
OnStartCommand方法相当重要,也就是activity启动的服务所需要处理的事情就写在这个方法里面;
二、在Activity中创建并启动服务
Intent sendIntent = new Intent(this, typeof(SendInfoService));
如果需要传递数据给服务,那么可以在启动之前使用intent放置数据,在服务中的OnStartCommand中使用intent参数即可获取activity传递过来的数据;
三、启动服务
启动服务有两种方式:
1、start方式 在Activity中调用this.StartService(sendIntent);即可启动服务,此方法最为简单;
2、bind方式 public override bool BindService(Intent service, IServiceConnection conn, Bind flags);
这就是bind方法的原型
参数:service:即为创建的服务intent,
conn:一个实现了IServiceConnection接口的对象,需要实现此接口提供的以下两个方法;
public void OnServiceConnected(ComponentName name, IBinder service)
{
}
public void OnServiceDisconnected(ComponentName name)
{
}
在绑定服务的时候,需要一个服务连接对象,ServiceConnection,服务一旦连接,就会调用onServiceConnected方法,我们可以在这个方法里面返回我们的本地服务对象;而在服务断开时候会调用onServiceDisconnected方法,我们可以清理一些服务资源。
三、停止服务;
在Activity中可以调用StopService(Intent)方法停止服务;
在服务中可以调用StopSelf();方法停止服务;
这就是本地服务的简单用法;
使用服务要注意一个关键的地方:Service和其他组件一样,都是运行在主线程中,因此不能用它来做耗时的请求或者动作。你可以在服务中开一一个线程,在线程中做耗时动作。