适当的UML图来模拟Android应用程序的线程,网络活动,处理程序等

时间:2016-11-23 18:49:03

标签: android concurrency uml

我正在编写一个Android应用程序,其中包括:

  • 当{Activity} .onResume()执行时,生成一个将网络套接字绑定到端口42777的线程,并将传入的数据分派给处理程序。除非当前没有WLAN适配器与本地(192.168。,10。,172.16-31。*)IP地址连接...然后,它会显示错误消息,并且在合适的情况下不会再进行任何操作WLAN连接成立,ConnectivityManager通知我的听众。

  • 生成一个从LinkedBlockingQueue获取Runnables的线程,并将它们提交给单线程ExecutorService。此时,Runnables基本上通过UDP将数据报广播到255.255.255.255。

  • 当{Activity} .onPause()执行时,端口42777上的套接字将关闭&释放后,LinkedBlockingQueue得到clear()'ed,并且ExecutorService(以及为其运行Runnables的Thread)被中断并终止。并且绑定到套接字的端口有希望在下次{Activity} .onResume()触发并尝试重新打开套接字之前释放...否则,我将不得不纠缠鼠窝,并添加逻辑锤离开网络堆栈,直到端口最终被释放。

什么样的UML图适合记录这样的东西,所以我可以通过对类如何相互交互的相当清楚的理解来讨论这个问题?我多年来一直在使用类图,但记录间接产生线程的事件链以响应Handler事件产生线程(截至目前)是我未开发的领域。

3 个答案:

答案 0 :(得分:3)

你可以混合使用序列和状态图。

  • 序列图可以显示在某些情况下如何执行功能。例如。对于您的第一个示例,左侧有main实例,它实例化thread(无论它有什么有意义的名称)。这将首先调用bind,侦听传入的数据并将数据发送到Handler。您将为不同的场景创建此类SD,您可能会认为图形表示为模型的读者增加了价值。最终,您可以使用活动图表来解释更高抽象层次的行为。
  • 状态图有助于沟通" if-this-then-that"你机器的状态。因此thread进入Connect状态,直到获得端口,然后进入Listening状态,转移到Dispatch等。

请注意,这两个图不是多余的。状态机几乎可以直接转移到代码。还有一些工具可以模拟状态机,这对复杂的机器最有帮助。序列图仅显示场景如何工作的示例。你最终用它做某种静态模拟"。在大多数情况下,您需要一组不同的序列图来传达这个想法。

正如@Ister指出的那样,您将需要适当的类图来显示类模型的静态结构。这是必不可少的,通常是"露点"一个模型。我以为这已经存在了: - )

答案 1 :(得分:1)

您的问题陈述提到了一个活动,它处理队列的内容,可能会暂停和恢复(似乎是特殊事件)。

最合适的图表来记录这种间接产生线程产生线程的"事件链#34;将是activity diagram,它提供了表示的方法:

  • 具有一系列动作,条件,事件和信号的复杂控制流; * object flows创建一个排序(即一个操作获取用于下一个操作的RunnableDatagram等对象);
  • 产生并加入concurrent flows(即您的主题);
  • 以灵活和富有表现力的方式划分组子流。

然而,这种图表在显示对象之间的交互方面不太好。这些最好用序列图表示。

当然,这可以通过状态图来补充,如其他答案中所解释的那样。然而,我认为对于两个已识别的状态(处理和暂停从一个状态转换到另一个状态)将是过度的,并且不会详细描述状态转换时发生的情况,正如您在子弹中描述的那样。

答案 2 :(得分:0)

我相信状态图将是建模的最佳选择。查看维基百科对此有何评论here