从后台工作者更新UI

时间:2012-04-25 08:02:31

标签: java android multithreading service android-asynctask

我想将我的客户端从Java Swing(Java client)移植到Android(Android client)。

基本上,我的Java client有一个线程,它运行一个永远的while循环来接收UDP数据包,并且基于UDP数据包的内容,相应的JFrame的UI将被更新。

现在我希望我的Android client有一个background worker类似Java client中的主题,worker将在main activity中初始化。然后当有来自UDP套接字的请求时,main activity将启动一些相应的活动(聊天活动),然后有一些其他请求来自UDP套接字,the worker将更新活动(此活动可以是屏幕上显示的主要活动或聊天活动。

所以我的问题是background worker应该是什么:

  • 服务
  • 普通Java线程
  • Asynctask
  • 或者......

哪种方式符合我的要求?

谢谢!

3 个答案:

答案 0 :(得分:1)

后台工作者应该是一项服务,因为

  

服务是一个可以执行长时间运行的应用程序组件   在后台运行并且不提供用户界面。

当您的UI将成为活动时,您的服务将读取UDP数据包并相应地修改活动。

答案 1 :(得分:0)

Service是您最合适的候选人。

答案 2 :(得分:0)

每个Android应用程序都有一个类Application类。首先扩展它,它将在你的应用程序即将开始活动之前第一次初始化。初始化/启动正常的java线程以在此处执行后台工作。关键优势在于您可以从应用程序中获取此应用程序类的实例(这意味着您可以从应用程序中的任何位置控制后台线程。发送后台http请求等等......无论如何....)然后初始化您想要做的特定活动的UI线程上的处理程序更改并执行类似的操作。

                 private Handler myHandler ; 

                  public void checkBackgroundAndUpdateUi()
                  {
                    if(conetxt.getApplicationContext().getStatus == completed)
                    {
                       initializeHandler();
                        handler.postRunnable(myRunnable);

                    }
                  }
             Runnable myRunnable = new Runnable(){

                public void run()
                 {

                  // update your UI views here .....

                 }
             };

             private void initializeHandler(){
               myHandler = new Handler ();
             }