U8SDK技术博客:http://www.uustory.com/,欢迎来坐坐。
百度传课已经停运,最新U8SDK视频教程已经转移至B站:U8SDK最新视频教程
我们知道,每个android应用程序中都有一个唯一的上下文Application对象,这个Application一般我们不需要去关心他,应用启动时,系统会自动创建一个默认的Application实例。但是,因为Application在整个应用中是唯一的,也就是说,他是一个单例。所以,有的应用就可能希望利用Application来完成一些工作。
好在,在android中,实现一个自定义的Application是很简单的。直接自定义一个类继承Application,然后在AndroidManifest.xml的application节点属性里将android:name设置为你自定义的这个application类即刻。
那么,Application和U8SDK又有什么关系呢?
这个是因为部分渠道SDK(比如百度SDK),正是在Application级别做了些事情,使得接入他们的游戏,需要使用他们的Application,或者自定义一个Application去继承SDK的Application,在Application对应的接口里调用他们的方法。
但是,现在问题来了,因为U8SDK整套框架的核心思想就是,兼顾所有渠道。不可能直接在游戏的AndroidManifest.xml中配置上某个渠道的Application或者自定义一个Application,去继承某一个渠道的Application。然而,渠道的要求很明确的横在中间,我们必须想办法越过去。
幸运的是,方法总是有的。在这里,我在U8SDK抽象层中定义了一个Application监听器IApplicationListener,同时定义一个继承了Application类的U8Application。在U8Application类中,维护了一个IApplicationListener实例。这样在U8Application的onCreate,attackBaseContext等方法中,会间接的调用IApplicationListener中相应的接口。
这样,在具体接入渠道SDK的时候,我们就定一个适配器模式的类来继承渠道自己的Application,同时实现U8SDK抽象层的IApplicationListener接口。然后在IApplicationListener的接口实现中,直接调用基类(渠道SDK的Application)的对应方法。
然后,游戏层如果有自己的Application,那么需要将该Application继承U8Application,如果没有自定义Application,那么就直接将U8Application配置到AndroidManifest.xml的application节点的android:name属性中。(怎么配置自定义Applica