2014-02-14 2 views
1

Я разрабатываю приложение для Android, которое должно много общаться с удаленным сервером. Для этой задачи я написал класс, который обрабатывает всю сетевую связь.Использование чрезмерного количества сетевых вызовов в android

Нужно ли делать для каждого метода как Asynctask? Как насчет методов, на которые я зависим, для остальной части выполнения кода? (так что нужно делать синхронно - например, ждать ответа на регистрацию?)

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

Edit -
Между тем - прежде чем сделать класс моего я нашел большой учебник, относящийся к libraray Google уже обрабатывать что libraray имя Volley учебника я смотрел на это this one

ответ

5

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

В псевдокоде, который будет выглядеть примерно так:

void makeNetworkCall(command, listener){ 
    async(){ 
     result = command.execute(); 
     listener.onCommandSuccess(result); 
    } 
} 
+0

Вы имеете в виду, что мне нужно создать общий класс, расширяющий класс асинхронности? нет библиотеки, которая уже обрабатывает сетевые звонки? пока что я создал класс для обработки каждой пользовательской команды (т. Е. Регистрации, входа, удаления учетной записи и т. Д.), Каждая команда возвращает некоторое значение в соответствии со значением JSONObject, которое оно получает с сервера, не означает, что мне нужно сделать каждый метод подклассом? Я не уверен, что понимаю ваш ответ, хотя кажется, что это хороший способ следовать ... = \ – crazyPixel

+0

Вы можете создать родительский класс, из которого наследуются все классы команд. Родительский класс будет иметь вышеуказанный метод. Дочерние классы собирают правильную команду, вызывают метод 'makeNetworkCall()' из родительского класса и затем обрабатывают ответ, который они возвращают с помощью прослушивателя. – SimonSays

+0

Спасибо, что я очень ценю, что буду загружать что-то в интересах других, как только я это сделаю [а также, чтобы получить некоторые предложения .. =)] – crazyPixel

0

мне нужно сделать для каждого отдельного метода как AsyncTask Do?

Да. Для Android требуется, чтобы сетевой код выполнялся асинхронно, поэтому пользовательский интерфейс никогда не блокируется.

Как насчет методов, на которых я зависим, для остальной части выполнения кода?

Чтобы завершить выполнение, вы можете подождать Asynchtask. См. this question.

+0

Использование 'get()' не является хорошей идеей, если вы не вызывают это на некотором * другом * фоновом потоке. В противном случае вы блокируете основной поток приложений, и это именно то, что мы используем 'AsyncTask', чтобы этого избежать. Лучшим решением является соблюдение управляемых событиями практик программирования, таких как ответ SimonSays. – CommonsWare

Смежные вопросы