xkeee
xkeee
  • 发布:2024-11-18 11:21
  • 更新:2024-11-18 11:25
  • 阅读:32

uts组件:既有index.vue又有index.uts时,UTSAndroid.getAppContext()和$androidContext获取,以及对象实例公用问题。

分类:uts

开发【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里把它定义为所谓的全局变量好像行不通?

2024-11-18 11:21 负责人:无 分享
已邀请:
DCloud_Android_DQQ

DCloud_Android_DQQ

1 是相同的。 两个api都指向当前正在运行的application 实例

2 没看懂你的问题,如果在多处需要 application实例,在对应的场景下分别调用

$androidContext

UTSAndroid.getAppContext()
  • 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

要回复问题请先登录注册