Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
#1

Приём сообщений от сервера в фоне - Программирование Android

09.09.2016, 07:06. Просмотров 2121. Ответов 59
Метки нет (Все метки)

Привет, нужна помощь в структуре.
Первый раз работаю с подключением.
В общем к делу:
1.Отправляю запрос на сервер
2.У меня есть tabhost, инициализирую его с двумя классами, диалоги, и звонки.
3. Сейчас после запроса мне приходит ответ в виде Json строки, распарспарсиваю и заполняю как на скрине.

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

Как только прийдет сообщение мне нужно сразу обновить.

Я использую обычный Thread , AsyncTask не подходит так как он же выполняется один раз.

А мне нужно слушать на протяжение всей жизни приложения. Все бы нечего, но на слабых одноядерных с оперативой 512 жутко тормозит.

Обращаюсь сюда потому что нужен совет людей по опытней.

Так же я понял что нужно скорее всего использовать подключение в Service, и выводить уведомления с помощью Reciver. Но не знаю как применить это к моему коду.

Буду очень благодарен за помощь.
Миниатюры
Приём сообщений от сервера в фоне  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 932
19.09.2016, 15:09     Приём сообщений от сервера в фоне #41
Цитата Сообщение от TonyBicbaev Посмотреть сообщение
App.sendLocalBroadcastMessage("KEY_METHOD", "KEY_METHOD");
В action правильнее передавать такую строку: допустим пакет называется test.ru, а я хочу провести обновление основного activity, вызов будет таким:
Java
1
App.sendLocalBroadcastMessage("test.ru.REFRESH_MAIN_ACTIVITY", "какой-то параметр");
Цитата Сообщение от TonyBicbaev Посмотреть сообщение
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(new BroadcastReceiver() {
* * * * * * @Override
* * * * * * public void onReceive(Context context, Intent intent) {
* * * * * * * * int task = intent.getIntExtra("KEY_METHOD", 0);
* * * * * * Log.e("e","e"); // по сути должен был вывести в логах "e", нечего не выводит.
* * * * * * }
* * * * },in);
ты не показал, что хранится в переменной in, а в ней должна хранится строка выше: "test.ru.REFRESH_MAIN_ACTIVITY", то есть ты ловишь сообщение по фильтру этой строкой
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
19.09.2016, 15:51  [ТС]     Приём сообщений от сервера в фоне #42
REALIST07,
вот так же написано
Java
1
2
String MAIN_ACTIVIVTY = "KEY_METHOD";
IntentFilter in = new IntentFilter(MAIN_ACTIVIVTY);
или нужно?
Java
1
2
3
String MAIN_ACTIVIVTY = "KEY_METHOD";
IntentFilter in = new IntentFilter(MAIN_ACTIVIVTY);
in.addAction(); // и тут та строка о которой вы говорите?
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 932
19.09.2016, 20:18     Приём сообщений от сервера в фоне #43
TonyBicbaev, заведи статическую переменную и пиши туда, чтобы не ошибиться,а в ресивере можно и так написать
Java
1
 new IntentFilter(Utils.ACTION_MESSAGE_UPDATE_STATE)
У тебя action строка не отражает действия, переменные должны быть осмысленными
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
20.09.2016, 06:10  [ТС]     Приём сообщений от сервера в фоне #44
REALIST07,

Java
1
2
3
4
5
6
7
8
9
  public static String MAIN_ACTIVIVTY = "com.chat.chat_v100.REFRESH_MAIN_ACTIVITY" ;
 LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                int task = intent.getIntExtra("KEY_METHOD",0);
 
            Log.e("e","e" + task);
            }
        },new IntentFilter(MainActivity.MAIN_ACTIVIVTY));
и
Java
1
  App.sendLocalBroadcastMessage(MainActivity.MAIN_ACTIVIVTY, "KEY_METHOD");
не работает(

Добавлено через 4 минуты
REALIST07, может манифест? а вообще даже ошибок никаких не выдает. не знаю что делать.
попробовал по этому примеру, работает, ну и логика там проще.
http://startandroid.ru/ru/uroki/vse-...treceiver.html

Добавлено через 21 минуту
REALIST07, Аллилуйя это в манифесте. Ошибка строчка permission была.
ну все спасибо вам за помощь, буду реализовать все подключение.
Alexvp
20.09.2016, 09:35
  #45

Не по теме:

TonyBicbaev, ты не мучайся Быстрее и дешевле станет заказать разработку у REALIST07
Похоже, ты еще только въезжаешь в это дело, а у же замахнулся на сложный проект. Если это коммерческий проект, то ты гений продаж. Но бедный, бедный заказчик

TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
20.09.2016, 11:51  [ТС]     Приём сообщений от сервера в фоне #46
Alexvp, Лол) задание от конторы)
вообще нужно с чего то начинать учиться) это раз) Да я и не мучаюсь мне интересно)
Просто я тут один под android пишу и просить не у кого вот и все) я не дурак и стараюсь схватывать на лету) ну вот кстати разобрался) Весь графический интерфейс у меня готов, скажу там тоже не мало времени ушло разобраться с адаптерами и так далее) но мне нравиться разработка очень клёва)

REALIST07, а вообще вопрос
если я хочу отправить сразу в 2 активити, правильно же так будет?) или каждый в свой поток засунуть?)
Java
1
2
3
4
5
6
7
   App.sendLocalBroadcastMessage(MainActivity.MAIN_ACTIVIVTY, "KEY_METHOD");
                    mHandler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            App.sendLocalBroadcastMessageChats(DialogActivity.DIALOG_ACTIVITY,chatts);
                        }
                    }, 3000);
Добавлено через 57 секунд
REALIST07, прост хочу что бы все было более менее правильно)
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 932
20.09.2016, 15:02     Приём сообщений от сервера в фоне #47
TonyBicbaev, прочитай про широковещательные сообщения в других источниках, а то ты не до конца понимаешь их суть, если тебе нужно подписаться в нескольких активити на одно и то же сообщение, то ты должен указать одинаковый new IntentFilter(MainActivity.MAIN_ACTIVIVTY)
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
20.09.2016, 15:53  [ТС]     Приём сообщений от сервера в фоне #48
REALIST07, а точно) туплю. спасибо
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
22.09.2016, 12:18  [ТС]     Приём сообщений от сервера в фоне #49
REALIST07, почему может выводить такое сообщение?
Java
1
2
3
4
5
6
7
8
09-22 10:59:14.334 13937-14399/? W/ActivityManager: Bad activity token: android.os.BinderProxy@100fbe1a
                                                    java.lang.ClassCastException: android.os.BinderProxy cannot be cast to com.android.server.am.ActivityRecord$Token
                                                        at com.android.server.am.ActivityRecord.forToken(ActivityRecord.java:367)
                                                        at com.android.server.am.ActivityRecord.isInStackLocked(ActivityRecord.java:1070)
                                                        at com.android.server.am.ActivityManagerService.getActivityOptions(ActivityManagerService.java:10838)
                                                        at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:1673)
                                                        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2483)
                                                        at android.os.Binder.execTransact(Binder.java:446)
Добавлено через 5 часов 14 минут
REALIST07, а еще как мне пропусть активити регистрации(моментально)? через intent получается некрасивый переход
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
28.09.2016, 06:35  [ТС]     Приём сообщений от сервера в фоне #50
REALIST07, Столкнулся еще с такой проблемой, подскажите пожалуйста.
Когда сервис активен(это точно), и сокет не закрыт(тоже точно).
Я нажимаю отправить запрос, а он не отправляется. в чем может быть проблема? то есть ничего вообще не происходит, не ошибок соединения нечего, ответы с сервера перестают приходить. но сокет открыт.
Может в потоке дело?
vxg
Модератор
3138 / 1940 / 214
Регистрация: 13.01.2012
Сообщений: 7,428
28.09.2016, 08:44     Приём сообщений от сервера в фоне #51
TonyBicbaev, не засыпал ли телефон после подключения сокета?
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
28.09.2016, 11:30  [ТС]     Приём сообщений от сервера в фоне #52
vxg, в плане что экран гас? ну даже когда он вырубился сообщения шли.
на случай если сокет закроется у меня будет реконект сразу. но он не закрывался.

Добавлено через 6 минут
vxg, он может и час без перерыва проработать, а может, при авторизации уже не работать.
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
28.09.2016, 11:31  [ТС]     Приём сообщений от сервера в фоне #53
vxg, вот где пометил, это я нажал на кнопку отправить запрос, и все сколько не жми, будут эти 4 лога. на сервер тоже не приходит. Аппа не критует.
Миниатюры
Приём сообщений от сервера в фоне  
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
28.09.2016, 13:34  [ТС]     Приём сообщений от сервера в фоне #54
vxg, а может даже снова заработать через какое то время)) я вот вообще не пойму в чем дело, тока на поток думаю.
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
30.09.2016, 06:06  [ТС]     Приём сообщений от сервера в фоне #55
vxg, Карочи.
Сокет переходил в состояние "пред закрытое" и не закрывался. и не принимал сообщения.
vxg
Модератор
3138 / 1940 / 214
Регистрация: 13.01.2012
Сообщений: 7,428
30.09.2016, 06:42     Приём сообщений от сервера в фоне #56
TonyBicbaev, переходил когда?
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
30.09.2016, 08:35  [ТС]     Приём сообщений от сервера в фоне #57
vxg, когда запрос на сервер отправлял)
vxg
Модератор
3138 / 1940 / 214
Регистрация: 13.01.2012
Сообщений: 7,428
30.09.2016, 08:46     Приём сообщений от сервера в фоне #58
TonyBicbaev, нелогично. На причину не тянет
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
30.09.2016, 09:02  [ТС]     Приём сообщений от сервера в фоне #59
vxg, ну вот так, по сути должен был закрываться. сделал проверку на все подключения, когда проблема та случалась, заходил сюда mWebSocketClient.getConnection().isClosing().
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   if (mWebSocketClient.getConnection().isOpen()) {
                                mWebSocketClient.close();
                              
                                connectWebSocket("1.1.3#" + login + ";" + password + "|");
 
                            } else if (mWebSocketClient.getConnection().isClosed()) {
                               //должен был сюда заходить
                                connectWebSocket("1.1.3#" + login + ";" + password + "|");
                            } else if(mWebSocketClient.getConnection().isClosing())
                            {     Log.e("status ", "status  =isClosing()");
                                mWebSocketClient.close();
 
                                connectWebSocket("1.1.3#" + login + ";" + password + "|");
 
                            } else if(mWebSocketClient.getConnection().isConnecting())
                            {
                                Log.e("status ", "status  =isConnecting()");
                            }else  if(mWebSocketClient.getConnection().isFlushAndClose())
                            {
                                Log.e("status ", "status =isFlushAndClose()");
                            }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2016, 17:46     Приём сообщений от сервера в фоне
Еще ссылки по теме:
Приложение в фоне, трее Android
Android Использование микрофона в фоне
Повторение операции в фоне Android
Маленькое изображение на фоне большого Android
Android Прозрачные кружки на полупрозрачном фоне

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 932
30.09.2016, 17:46     Приём сообщений от сервера в фоне #60
Сервис должен уметь себя перезапустить если его прихлопнули в onTaskRemoved и перезапустить если понял, что соединение потеряно по каким-то причинам, как это реализовать - на ваше усмотрение
Yandex
Объявления
30.09.2016, 17:46     Приём сообщений от сервера в фоне
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru