开发【uts组件】,需要对接第三方sdk,所以想把对接部分的代码放在index.uts里,以保持index.vue的简洁性(index.vue只负责组件相关项设置)
我看到官方有个提示:【UTSAndroid.getUniActivity()/UTSAndroid.getAppContext() 在组件内不建议使用,请使用$androidContext来替代】
我有2个问题:
1,在index.uts里使用【UTSAndroid.getAppContext()】,跟在index.vue里写【$androidContext】得到的对象,是相同的吗?
如果不相同,怎么在index.uts里拿到【$androidContext】呢?
2,在index.uts里,有个实例【let mLivePusher : V2TXLivePusher | null = null】,这个实例要求在对外开放的【N个方法里公用】,比如:
function testA(){ mLivePusher.Start()... }
function testB(){ mLivePusher.Stop()... }
function testC(){ mLivePusher.DoSomething()... }
怎么设计才能达到这个目的?直接在index.uts里把它定义为所谓的全局变量好像行不通?
xkeee (作者)
问题1:明白了
问题2:是另外一个实例“mLivePusher”,需要在index.uts多个方法中调用。我刚刚看了官方的“uni-stat”组件,在“class ConfigData {public static getInstance() : ConfigData}”中找到了灵感,官方采用了单例模式解决这个问题。另外,腾讯云UNI团队开发的"TencentCloud-Push -> TIMPushConfig.getInstance().setRunningPlatform(2);
const Push = TIMPushManager.getInstance();Push.registerPush(context, SDKAppID.toInt(), appKey, new PushCallback(pushCbOptions))" 也是这个思路。
那么,大概可以理解为:当index.uts里有多个方法需要用同一个对象时,就封装一个class 单例 来实现,是这样吧?
2024-11-18 13:20
xkeee (作者)
你好,我刚刚测试了一下,对于在index.vue的NVLoad中创建的某个实例(比如mLivePusher),需要传给index.uts,仅需要在index.uts里,定义一个全局变量(let _mLivePusher : V2TXLivePusher | null = null),再定义个方法“setLivePuther(mLivePusher: V2TXLivePusher)”,在index.vue里传给index.uts,就可以实现【index.uts多个方法公用这个对象实例】了哦?都无需使用单例模式了。请问,这样做可以吗?
2024-11-18 16:47
xkeee (作者)
或者,在index.uts里,有什么办法可以取到index.vue的【$el】吗?
2024-11-18 17:19