这是我的场景:我必须编写一个Android应用程序,在一个屏幕上显示两个代码(例如新闻自动收报机和股票代码)。两个代码的数据来自单独的URL。我正在努力想出一个有效的解决方案。所以到目前为止我的方法是
创建单独的类以从URL(新闻和股票代码)获取数据。这些类应完全负责从服务器获取数据以及更新活动中定义的UI组件上的数据。
所以我想,每个类应该有2个私有内部类(线程),一个用于从服务器获取数据,另一个用于更新GUI。一旦获取线程获取所有数据,显示线程将开始在GUI组件上绘制它。
我的问题是
这是正确的做法吗?我认为这可能有用,但我试图找到是否有 更好的做事方式,比如使用AsyncTask等需要一些专家建议。
我不想将GUI组件(textView)的引用从Activity传递给Thread class(试图解耦),所以我在考虑从中传递处理程序的实例 对这些类的活动。这样内部线程类就可以在处理程序中发布消息 然后在Activity中我可以从处理程序获取消息以更新GUI组件。是 可以将处理程序的引用传递给线程。这是应该怎么做的?
如果有更好的方法,我完全可以改变上述方法,所以请告诉我你将如何解决这个问题。
由于
答案 0 :(得分:1)
所以我想,每个类应该有2个私有内部类(线程),一个用于从服务器获取数据,另一个用于更新GUI。一旦获取线程获取所有数据,显示线程将开始在GUI组件上绘制它。
没有。您无法从后台线程修改GUI。您需要一个后台线程来下载和解析数据。您不仅不需要后台线程来更新GUI,而且对您没有任何帮助。
我认为这可能有用,但我试图找出是否有更好的方法来做事,比如使用AsyncTask等。需要一些专家建议。
AsyncTask
是一种可能性,可能是对普通线程的改进。使用IntentService
是另一种方法。线程或活动AsyncTasks
的难点在于处理配置更改(旋转,停靠/取消停靠等)会变得很烦人。使用IntentService
和Messenger
可以简化这一点。 Here is a sample application展示了这种技术。
将处理程序的引用传递给线程是否可以。
是
这是应该怎么做的?
只要处理程序是活动的数据成员(因此它不会被垃圾收集等),是的。 AsyncTask
隐藏了你,所以你不必担心这个问题。