Android - 模块化应用程序设计

时间:2015-03-10 19:57:08

标签: java android linux ssh modular

我正在为我的计算项目开发一个应用程序。简单来说,它通过SSH会话从计算机收集信息并显示CPU使用情况等。

我一直想添加在应用程序本身拥有多个连接的能力,但是我希望它能够被设置,以便用户可以随时添加/删除连接并在它们之间切换。我想设置它以便所有连接可以立即激活(可能最多8个),以便可以完成后台监视。

我不知道如何让我的应用程序像这样“模块化”。任何想法都会很棒! :D我设置了1个连接正常工作,有多个连接会增加我的应用程序的使用。

如果你想查看我的代码,我在GitHub上有一份副本。它是它的旧版本,但代码大致相同。 My ssh class

谢谢大家!

1 个答案:

答案 0 :(得分:1)

排序版本:使用队列连接线程。

你有9个输入流。 8个来自SSH源,另一个来自您的用户。常见的方法是使用线程。 (可能有另一种使用java通道的方法,java.nio.channels,它有回调)。每个流都需要独立于其他流的输入和输出。因此,您需要某种消息队列进出每个流。这样,尽管流被阻止,应用程序的其余部分仍可以愉快地进行。

Android UI与大多数UI框架一样,是“单线程”。当UI框架说它们是“单线程”时,它们意味着一个线程用于应用程序中的所有UI交互。因此,您需要一种方法在执行SSH的线程和执行UI的一个线程之间发送消息。在Android中,您可以将消息发布到UI线程上。另一种方法是在应用程序内进行本地广播,并在需要时提供听众。另一种方法是使用像Otto这样的消息错误框架,它是应用程序中的一个全局空间,其中每个活动或片段等都会注册自己以获取消息。

在你的情况下,现在,我只是关闭一些Java线程,然后调用“post”将消息发回到某个View中。

典型的UI“线程”是一些获取UI输入并调用程序代码的循环。在Android中,它被称为“looper”。这是一篇文章: https://developer.android.com/training/multiple-threads/communicate-ui.html 这里有一个更一般的讨论文章: http://www.intertech.com/Blog/android-non-ui-to-ui-thread-communications-part-1-of-5/

您可能也只是想使用“runOnUIThread”来运行任何与UI混淆的代码。但是,本地广播也很有效。

沿着这条路线,Queues是与大型机等荒谬的旧技术集成的经典方法,它们像夜间批处理那样做愚蠢的设计,而不是立即处理。

相关问题