2012-02-21 65 views
-1

我想在这里做的是我想调用一个web服务,并基于它的响应我可能会调用另一个web服务或启动一个activity.I是已经写在一个单独的线程的Web服务,但问题是,我打电话在工作线程中的活动, 为了让自己更清楚我已经把我的伪代码从工作者线程开始android活动?这是一个很好的做法

if (User ID and Password present in the shared preference) THEN 
       Utils.checkauthorisation(API) //Web Service Call 
       if(respsonse is Paswordexpired) 
        erase password from DB 
        Goto (LOGIN SCREEN)//startActivity Call 
       else if(download of images hasnt happened today)) THEN 
         UTILS.DownloadImages//Web service call 
         if(response==connectivityorOtherError) 
          Toast respective Message 
          GOTO (GALLERY SCREEN)//startActivity Call 
         else if (response==confilicted Data) 
          Goto (CHANGES SCREEN)//startActivity Call 
         endif 
       endif 
endif 

我正打算显示一个进度条,并做所有这些事件在这样

progressDialog = ProgressDialog.show(this, "Loading", 
       "Authenticating Please wait."); 

    new Thread() { 
     public void run() { 

     ///execute the pseudo code 

        startActivity(intent); //Is this a good practice 

     Message msg = Message.obtain(); 
     msg.what = 1; 
     messagHandler.sendMessage(msg); 
     } 

    }.start(); 



      private static Handler messagHandler = new Handler() { 
    public void handleMessage(Message message) { 
     super.handleMessage(message); 
     switch (message.what) { 
     case 1: 
      progressDialog.dismiss(); 
      break; 
     default: 
      break; 
     } 
    } 

}; 

但是,这扰乱了我的东西线程是我必须开始在辅助线程活动在这里。 这是一个很好的做法吗?我最初认为我们只能从UI线程开始一个活动。这里后端发生的过程是什么(线程意义上的)?如果这不是一个好的做法,那么实现我的伪代码的其他选择是什么?

PS:抱歉再次问这个问题。我早些时候问过同样的问题,但没有完全传达我想要的东西,所以收到了工人线程(我的问题的一部分)开始活动的替代方案,但没有得到答案,牛逼收到任何答案的“这是一个很好的做法”

感谢

回答

1

我不能完全理解你在哪里开始的活动,但假设它是在你的伪代码的“GOTO”行,我建议您为每个想要启动的活动设置不同的值,然后在handleMessage(Message)上启动它。

这是假定处理程序是在UI线程中创建的。如果不是,则不应该忽略ProgressDialog,因为这两件事都应该从UI线程完成。在UI线程上创建一个并在那里。

+0

感谢您的回答。但怀疑是我能够从我的工作线程调用startActivity并转到另一个活动。是否有任何问题要做? – rogerstone 2012-02-21 06:16:37

+1

它工作正常,但不推荐,因为它可能导致任务堆栈问题,并可能导致内存泄漏。 – Suman 2012-02-21 07:12:08

相关问题