Android о многопоточном процессе - PullRequest
0 голосов
/ 18 октября 2011

У меня много задач, и я должен использовать многопоточность для их обработки, что является лучшим решением? Смысл в том, что я могу использовать наименьшее количество потоков, но обрабатывать больше всего задач с самым быстрым временем.

Ответы [ 4 ]

1 голос
/ 18 октября 2011

Я думаю AsyncTask полезно для вас.Вы можете найти больше об этом Android - AsyncTask в этом хорошем объяснении и приведенном примере.

А если вы хотите использовать Thread, тогда вам придется управлять всеми потоками, а также бытьуверен в not to blocking the UI Thread.

Разница между обработчиком и AsyncTask ...

1. Обработчик связан с основным потоком приложения.он обрабатывает и планирует сообщения и исполняемые файлы, отправляемые из фоновых потоков в основной поток приложения.

2.AsyncTask предоставляет простой метод для обработки фоновых потоков с целью обновления пользовательского интерфейса, не блокируя его из-за длительных операций.

Ответ заключается в том, что оба могут быть использованы для обновления пользовательского интерфейса из фоновых потоков, разница будет в вашем сценарии выполнения.Вы можете рассмотреть возможность использования обработчика, если вы хотите публиковать отложенные сообщения или отправлять сообщения в MessageQueue в определенном порядке.

Вы можете рассмотреть возможность использования AsyncTask, если вы хотите обмениваться параметрами (таким образом, обновляя пользовательский интерфейс) между основным потоком приложения и фоновым потоком простым и удобным способом.

Пример использования потоков, обработчиков и AsyncTask в Android .

Спасибо.

0 голосов
/ 18 октября 2011

Существует множество способов сделать многопоточность в Android.

Мне нравится использовать handlerThread , который дает вам все инструменты, позволяющие вашему интерфейсу легко общаться с вашими потоками.Например:

public class MyThread extends HandlerThread implements Callback
{
    public MyThread()
    {
        super(ThreadDP.class.getSimpleName(), Process.THREAD_PRIORITY_DISPLAY);
        this.start();
    }

    @Override
    protected void onLooperPrepared()
    {
        super.onLooperPrepared();
    }

    @Override
    public boolean handleMessage(Message msg) {
        switch (msg.what)
        {
            case 1 :
                this.doA();
                return true;

            //Message 2 let's call doB()
            case 2 : 
                this.doB();
                return true;

            default:
                return false;
        }
    }

    //Implement doA() and doB()
}

Этот простой поток может обрабатывать сообщения, отправленные вашей деятельностью или другими потоками.Система дескрипторов довольно быстрая (я могу получить 25fps mjpeg без проблем).

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

0 голосов
/ 18 октября 2011

Хороший пост о многопоточности в Android можно найти здесь:

http://android -developers.blogspot.com / 2010/07 / многопоточность-для-performance.html

0 голосов
/ 18 октября 2011

Пожалуйста, посмотрите на службы и AsyncTask для вас же. Это лучше, чем иметь дело с чистыми потоками, если вы не в NDK и не работаете с pthreads.

...