可以/应该在Android中的Model类扩展Observable

时间:2013-06-18 16:28:42

标签: android model-view-controller

我是Android开发的新手,所以我想知道天气有一个模型实现一个可观察的是好的做法,或者this会发生。

在我的情况下,我的模型不是数据库模型,而是服务器的状态。我有以下课程

  • MainActivity - 主要内容
  • FragmentInfo - 包含文本框的片段视图
  • ModelServerStatus - 一个简单的类,它包含一个布尔变量和一些有用的函数来设置/获取变量。
  • ThreadCheckServerStatus - 通过UDP连接到服务器并进行写/读的线程。该线程了解ModelServerStatus并将使用setStatus更新ModelServerStatus。这个线程总是在运行并且睡了5秒钟。

我应该在Observable上展开ModelServerStatus并在每次ModelServerStatus.setStatus(true/false)运行时致电通知。这样MainActivity可以是Observer并更新FragmentInfo.textView

非常基本的ModelServerStatus.setStatus()实施

public void setStatus(boolean newStatus)
{
    // See if the value of the server has changed
    if (hasStatusChanged(newStatus))
    {
         //Observer Notify
         setChanged();
         notifyObserver();
    }
}

我背后的想法:

  

模型将通知Controller更新视图

  

ModelServerStatus将通知MainActivity更新FragmentInfo

我也考虑过

  

Controller将检查Model以获取更新,并在需要时更新View。

但这听起来不对。

真正的问题是,这项任务的最佳实施是什么!

思考?谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

我认为在这种情况下我会做的是在后台运行Service。这将保持服务器的状态。将其初始化为false。连接到服务器,成功时将其设置为true。根据需要进行轮询,在服务器不再可用时将其设置为false。

当状态从true变为false时,Service应触发broadcast,反之亦然。

在活动(或片段)中,您可以register一个BroadcastReceiver来监听onResume()中的broadcast。取消注册onPause()中的BroadcastReceiver

每当您的服务检测到更改时,您的UI组件都将进行广播。

警告

进行网络投票会让您的用户非常非常脾气暴躁。大多数用户会因此类行为而卸载您的应用程序。