从工作线程启动android活动?这是一个很好的做法

时间:2012-02-21 05:55:48

标签: android multithreading android-activity

我想在这里做的是我想要调用web服务并根据其响应我可能会调用另一个webservice或启动一个activity.I我已经在一个单独的线程中编写Web服务但问题是我在工作线程中调用活动, 为了让自己更清楚,我已经把我的伪代码

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 个答案:

答案 0 :(得分:1)

我无法完全理解您开始活动的位置,但假设它位于伪代码的“GOTO”行中,我建议您为每个活动设置不同值的msg.what您要启动,然后在handleMessage(Message)上启动它。

假设在UI线程中创建了Handler。如果不是,你也不应该忽略ProgressDialog,因为这两件事都应该从UI线程完成。在UI线程上创建一个并获取它。