Запуск активности Android из рабочего потока? Это хорошая практика? - PullRequest
0 голосов
/ 21 февраля 2012

То, что я пытаюсь сделать здесь, - это то, что я хочу вызвать веб-сервис, и на основании его ответа я могу вызвать другой веб-сервис или начать действие. Я уже пишу веб-сервис в отдельном потоке, но проблема в том, что я называю активность в рабочем потоке, Чтобы сделать себя более понятным, я поставил свой псевдокод .

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;
        }
    }

};

Но меня беспокоит то, что мне нужно запустить действие в рабочем потоке здесь. Является ли это хорошей практикой? Сначала я думал, что мы можем начать действие только из потока пользовательского интерфейса. Что за процесс происходит в бэкэнде здесь (в смысле потока)? Если это не очень хорошая практика, каковы другие альтернативы для реализации моего псевдокода?

PS: Извините, что задал этот вопрос еще раз. Я задавал тот же вопрос ранее, но не смог точно передать то, что хотел, поэтому получил ответы об альтернативах началу работы в рабочем потоке (часть моего вопроса), но не сделал получить любой ответ на "это хорошая практика"

Спасибо

1 Ответ

1 голос
/ 21 февраля 2012

Я не могу полностью понять, с чего вы начинаете действие, но предполагая, что оно находится в строках псевдокода "GOTO", я бы посоветовал вам установить msg.what с различными значениями для каждого действия, которое вы хотитезапустить и затем запустить его на handleMessage(Message).

Это предполагает, что обработчик создан в потоке пользовательского интерфейса.Если это не так, вы не должны также игнорировать ProgressDialog, поскольку обе вещи должны выполняться из потока пользовательского интерфейса.Создайте его в потоке пользовательского интерфейса и получите его там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...