服务与活动一样,在它的整个生命周期中存在着一些事件,下图可以很好解释整个过程以及涉及到的方法:

Xamarin.Android服务的实现

在真实的使用中,Service来还包含一个OnBind方法,并且必须要使用该方法,但是只要返回NULL即可,除非当前服务是一个绑定服务,那么就要返回实现了IBinder的实例。

 

二、回调方法的总结

上图中涉及到了几个方法,下面将做简单的介绍:

OnCreate:只会在服务第一次开启的时候调用,主要负责一些初始化代码

OnStartCommand:每次启动服务都会调用该方法,可能来自StartService或者由系统重启。一般负责开启需要长时间的任务。并且该方法还要返回StartCommandResult类型的枚举,该返回值将影响系统重启该服务的细节。

OnDestroy:当服务使用StopSelf或者StopService时调用,主要用来释放资源等。

 

三、返回不同StartCommandResult服务的区别

Sticky:当服务由于内存不够被系统关闭后,将会由系统重启该服务,但是传入OnStartCommand方法的intent参数为NULL,意味着该类型的服务无法恢复上次的状态,只能进行常规的长时间任务。

RedeliverIntent:该类型的服务与Sticky的唯一的区别就是在系统重启该服务时,将会将上次关闭的服务的状态传递给OnStartCommand方法,用来恢复上次的任务继续执行。适合需要长时间连续的任务。

NotSticky:该服务被系统关闭后将不会重启。

StickyCompatibility:在API 5或以上的环境中的行为与Sticky一样,相反在API 5以下可能不会重启服务。

 

四、实现一个服务

这里我们需要继承自Service并还要需要加上Service注解属性(项目自行新建

1 namespace ServiceStudy
2 {
3     [Service]
4     public class MainService : Service
5     {
6 
7     }
8 }

其中[Service]负责在AndroidManifest.xml注册服务,比如上面的服务将会生成如下字符串:

1 <service android:name="ServiceStudy.MainService"></service>

下面我们开始具体实现一个服务,上面已经说明了无论任何服务都要重写OnBind方法,所以我们先重写该方法:

1         public override Android.OS.IBinder OnBind(Android.Content.Intent intent)
2         {
3             return null;
4         }

然后是OnCreate方法:

1         public override void OnCreate()
2         {
3             base.OnCreate();
4             Log.Debug("xamarin", "创建服务");
5         }

接着是OnStartCommand方法:

1         public override StartCommandResult OnStartCommand(Android.Content.Intent intent, StartCommandFlags flags, int startId)
2         {
3             Log.Debug("xamarin", "启动服务");
4             return StartCommandResult.Sticky;
5         }

最后就是OnDestroy方法:

1         public override void OnDestroy()
2         {
3             base.OnDestroy();
4             Log.Debug("xamarin", "关闭服务");
5         }

这样一个简单的服务就完成了,下面是整体代码:

 1     [Service]
 2     public class MainService : Service
 3     {
 4         public override void OnCreate()
 5         {
 6             base.OnCreate();
 7             Log.Debug("xamarin", "创建服务");
 8         }
 9 
10         public override StartCommandResult OnStartCommand(Android.Content.Intent intent, StartCommandFlags flags, int startId)
11         {
12             Log.Debug("xamarin", "启动服务");
13             return StartCommandResult.Sticky;
14         }
15 
16         public override void OnDestroy()
17         {
18             base.OnDestroy();
19             Log.Debug("xamarin", "关闭服务");
20         }
21 
22         public override Android.OS.IBinder OnBind(Android.Content.Intent intent)
23         {
24             return null;
25         }
26 }
View Code

相关文章:

  • 2021-06-06
  • 2021-05-26
  • 2021-07-28
  • 2021-04-25
  • 2022-12-23
  • 2022-03-07
猜你喜欢
  • 2021-05-15
  • 2021-10-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-16
  • 2021-08-27
相关资源
相似解决方案