问题描述
我有MainActivity和MyService类。在服务中,我与服务器连接,但是我还需要更新一些需要MainActivity提供上下文的UI。更准确地说,我需要使用layoutInflater,然后更新视图。是否应该单独进行? 一个功能的例子
private suspend fun setStations(serverText: String) {
withContext(Main) {
for (i in (1..numStations(serverText)))
{
frame = ScrollView( ) //would need context here
layoutInflater.inflate(R.layout.frame_layout,frame)
.
.
.
解决方法
通常,这种关系由体系结构模式(模型视图演示者)组织。您应该向演示者中的服务器发出请求,然后参考“活动”。这可能对您有帮助https://github.com/Arello-Mobile/Moxy
,通常,您可能希望将业务逻辑和UI问题尽可能地分开,以使代码更具可读性和可测试性。为此,您可以根据应用程序的需求和复杂性遵循MVP,MVVM或MVI等架构模式。
因此,在您的情况下,您可能会在活动中设置一个回调设置,即在服务完成执行其代码时调用该调用。
作为参考,这里有一些不错的阅读材料:
- https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
- https://antonioleiva.com/clean-architecture-android/
此外,这是一个使用MVVM(一种非常常见的体系结构)的示例项目 https://github.com/skydoves/Pokedex