帮助与文档

> >

Android 插件服务

插件服务的定义

当下ShareSDK已经具备了一定的技术、数据和服务功能,为了让集成开发者可以更好地在ShareSDK上进行后续的开发,ShareSDK开放了一个名为“插件服务”的框架。开发者可以通过继承ShareSDK内部的一个“服务”基类后,利用ShareSDK的资源,结合您自己的代码,对ShareSDK进行二次开发,创建更强大的功能。本章将介绍如何创建一个插件服务并,结合ShareSDK的“评论与赞”服务,描述其使用方法。

1、创建插件服务

ShareSDK的插件服务都集成自cn.sharesdk.framework.Service,至于服务的名字和用途并没有特别的限制,只是在混淆的时候,这个类需要被keep下来,因为ShareSDK内部需要用到这个类的方法。下面是一个空的服务:

public class MyService extends Service {
private static final int VERSION_INT = 1;
private static final String VERSION_NAME = "1.0.0"; 

public MyService(Context context) {
super(context);
}

public void onBind() {
// 当Service被注册到ShareSDK后,此方法会被调用
}

public void onUnbind() {
// 当Service被反注册到ShareSDK前,此方法会被调用
}

protected int getServiceVersionInt() {
return VERSION_INT;
}

public String getServiceVersionName() {
return VERSION_NAME;
}

}

 

从上面的实例代码可以看出,ShareSDK对插件服务的约束很少,只是要求子类实现getServiceVersionInt和getServiceVersionName两个方法而已,因为ShareSDK内部通信协议中需要用到这两个字段。其他的方法,如onBind会在插件服务被实例化并注册到ShareSDK以后调用一次,而onUnbind相反,在从ShareSDK反注册之前被调用。ShareSDK建议开发者不要修改插件服务的构造方法,虽然这个方法现在和onBind在同一个线程中被执行,但是后续版本的ShareSDK,考虑到效率问题,可能会将之移动到另外一个子线程中,因此原来的初始化代码就可能因此失效。如果您需要在服务被注册到ShareSDK以后执行一些初始化操作,请在onBind方法中完成。

虽然插件服务提供了公开的构造方法,但是不应该使用这个方法来实例化一个插件服务,而应该调用ShareSDK.registerService方法,传递插件服务的类来完成注册。如:

ShareSDK.registerService(MyService.class);

ShareSDK会在registerService方法内部实例化插件服务,并以单例模式保存这个实例,直到ShareSDK.unregisterService方法被调用后,此实例会被反注册并在随后被回收。

使用某个插件服务之前,ShareSDK要求此服务必须已经被注册,但是插件服务的反注册操作并不是必须的,即使一个服务从来没有被显式反注册,当ShareSDK.stopSDK方法被调用的时候,所有注册到ShareSDK的服务都会被反注册。

ShareSDK允许开发者多次注册同一个插件服务,但ShareSDK内部只认第一次注册的服务,后续的注册操作都会失效。须要注意的时候,registerService和unregisterService两个方法都应该在ShareSDK.initSDK之后调用,离开ShareSDK的生命周期,插件服务是没有意义的。

使用服务的时候,代码和实例化一个Platform类似,但是更加方便:

MyService service = ShareSDK.getService(MyService.class);

也就是说,获取插件服务以后,不需要执行强制转换(感谢Java的泛型功能,让ShareSDK能够内部完成了强制转换)。

更多插件服务的详细接口说明,请参考我们的Api文档

2、评论与赞服务

评论与赞是ShareSDK提供的一个插件服务,关于其详细说明,请参考“评论与赞服务”条目。