Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何传递参数给Startup #15

Open
kennir opened this issue Jul 12, 2021 · 7 comments
Open

如何传递参数给Startup #15

kennir opened this issue Jul 12, 2021 · 7 comments
Labels
question Further information is requested

Comments

@kennir
Copy link

kennir commented Jul 12, 2021

大部分的SDK初始化都需要参数,有得需要代码调用有得需要在manifest里设置, manifest里设置的不用修改,通过代码设置的参数应该如何传递给startup呢?

谢谢

@idisfkj
Copy link
Owner

idisfkj commented Jul 13, 2021

大部分的SDK初始化都需要参数,有得需要代码调用有得需要在manifest里设置, manifest里设置的不用修改,通过代码设置的参数应该如何传递给startup呢?

谢谢

我猜你应该是动态参数?例如通过网络请求或者其它配置来获取参数,然后进行传递;对于这种,获取参数与初始化的步骤就是一个依赖关系。你可以在dependencies中建立与参数的依赖,然后在初始化的startup中通过onDependenciesCompleted回调获取依赖的参数值。

@kennir
Copy link
Author

kennir commented Jul 13, 2021

大部分的SDK初始化都需要参数,有得需要代码调用有得需要在manifest里设置, manifest里设置的不用修改,通过代码设置的参数应该如何传递给startup呢?
谢谢

我猜你应该是动态参数?例如通过网络请求或者其它配置来获取参数,然后进行传递;对于这种,获取参数与初始化的步骤就是一个依赖关系。你可以在dependencies中建立与参数的依赖,然后在初始化的startup中通过onDependenciesCompleted回调获取依赖的参数值。

谢谢回复

比如我们的库接入了友盟的SDK,那么需要传入umeng的appid,这个appid我们不想写死在库里,而是通过app调用库的时候传递进来,之前是在调用库的初始化的时候有一个builder可以传递入umeng的appid,现在改为android startup后我们实现了一个UMengStartup,但是不知道如何传递appid是最合适的方法

按照上一个回复我理解是不是需要库里实现一个abstract的 ParamsStartup, 让app去实现这个ParamsStartup,而umeng的depencies的列表里返回这个ParamsStartup ?

@idisfkj
Copy link
Owner

idisfkj commented Jul 13, 2021

有点抽象,如果你只是为了动态传递appid的话,构建ParamsStartup也是可以的。

另外,传递过来后不能先保存下来吗?然后再到UMengStartup中取出使用?

@kennir
Copy link
Author

kennir commented Jul 13, 2021

有点抽象,如果你只是为了动态传递appid的话,构建ParamsStartup也是可以的。

另外,传递过来后不能先保存下来吗?然后再到UMengStartup中取出使用?

我也觉得这样做对接入的app有点繁琐,先保存下来的话那还得有个singleton或者static的变量来中转一下,感觉也不是太完美,因为在实际的情况里接入了很多的sdk后会有很多个动态的配置项,都需要app在启动后构建出来传递给sdk初始化

@idisfkj
Copy link
Owner

idisfkj commented Jul 14, 2021

android-startup支持两种注册方式。

一种是自动注册,内部使用反射来创建各个startup,所以是不支持对startup的构造方法进行传参的。
另外一种是手动注册,这种方式可以对startup的构造方法进行传参。

你可以尝试下手动注册的,看能否达到你的预期。

当然如果有好的建议欢迎提出!

@idisfkj idisfkj added the question Further information is requested label Jul 15, 2021
@kennir
Copy link
Author

kennir commented Jul 15, 2021

android-startup支持两种注册方式。

一种是自动注册,内部使用反射来创建各个startup,所以是不支持对startup的构造方法进行传参的。
另外一种是手动注册,这种方式可以对startup的构造方法进行传参。

你可以尝试下手动注册的,看能否达到你的预期。

当然如果有好的建议欢迎提出!

好,我研究一下手动注册

谢谢

@ParadiseHell
Copy link

大部分的SDK初始化都需要参数,有得需要代码调用有得需要在manifest里设置, manifest里设置的不用修改,通过代码设置的参数应该如何传递给startup呢?

谢谢

你这种应该是不属于启动框架该管的问题呀,完全可以通过定一个配置的 api 模块,其他模块依赖这个 API 模块,通过 SPI 的方式获取 api 的实现,只要 app 最终集成 api 模块的实现就行。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

3 participants