powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Android. Обновление Activity по таймеру
14 сообщений из 14, страница 1 из 1
Android. Обновление Activity по таймеру
    #37591238
AYTereschenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так как все-таки правильно обновлять какие-то данные на экране по периодическому событию? Например надо раз в минуту запрашивать из инета данные и обновлять цифры в приложении. Какие шаги надо для этого предпринять?
Данные же на экране можно обновлять только из главного UI-треда, как я понял. Как это реализовать?
Сделать сервис, который будет раз в минуту доставать из инета данные и при помощи Intent отправлять их в BroadcastReceiver, в котором и обновлять данные на экране? А как в сервисе реализовать задержку в 1 минуту? Там есть что-то наподобие Thread.sleep() или надо другой способ применять?
...
Рейтинг: 0 / 0
Android. Обновление Activity по таймеру
    #37591258
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а там нет обычного таймера?

Код: java
1.
2.
3.
4.
5.
Timer.scheduleAtFixedRate(new TimerTask() {
  public void run() {
    // доставать из инета данные и при помощи Intent отправлять их в BroadcastReceiver
  }
}, 0, 60 * 1000);
...
Рейтинг: 0 / 0
Android. Обновление Activity по таймеру
    #37591263
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
данные реально раз в минуту обновляются? если нет, то push. а вообще у тебя слишком много вопросов в одном предложении. некие телодвижения в отдельном потоке с обновлением гуя? AsyncWorker. Сервис - точно ли он нужен, или обновлять нужно пока приложение открыто? Периодически? в андроидной jvm таймеры организуются так же как и в жабе. Поступающие данные интересны только твоему аппу? если да, то зачем Broadcast?

p.s. надо определиться с архитектурой для начала.
...
Рейтинг: 0 / 0
Android. Обновление Activity по таймеру
    #37591277
AYTereschenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpashaданные реально раз в минуту обновляются? если нет, то push.
Да, обновляются раз в минуту. А что за push?
а вообще у тебя слишком много вопросов в одном предложении. некие телодвижения в отдельном потоке с обновлением гуя? AsyncWorker.
chpashaСервис - точно ли он нужен, или обновлять нужно пока приложение открыто? Периодически?
Только пока приложение открыто, периодически, раз в минуту. Если сервис не нужен, то что взамен?
chpashaПоступающие данные интересны только твоему аппу? если да, то зачем Broadcast?
Да, интересны только моему. Если не броадкаст, то что взамен? Я видел в документации некий android.support.v4.content.LocalBroadcastManager, но у меня его нет в classpath'е.
...
Рейтинг: 0 / 0
Android. Обновление Activity по таймеру
    #37591362
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AYTereschenkoДа, обновляются раз в минуту. А что за push?
push это когда сервер уведомляет тебя об изменениях, а не ты дергаешь его периодически. но если у тебя данные обновляются раз в минуту, то про пуш забыли, просто дергай сервер раз в минуту

AYTereschenkoТолько пока приложение открыто, периодически, раз в минуту. Если сервис не нужен, то что взамен?
имхо достаточно фонового потока. стартуем по таймеру AsyncWorker, когда он возвращает результат - обновляем данные. в той вьюхе где это нужно. можно в отдельный класс и подписаться во вьюхе на событие обновления данных. последний вариант аккуратней, чем все в представление пихать. сервис имеет смысл, если надо делать что-то в фоне даже если апп закрыт (например аплоад файла и т.п.).

AYTereschenkoДа, интересны только моему. Если не броадкаст, то что взамен? читай про
How do I pass data between Activities/Services within a single application?
...
Рейтинг: 0 / 0
Android. Обновление Activity по таймеру
    #37591447
AYTereschenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpasha,

Ну вроде все понятно, кроме одного: как "подписаться во вьюхе на событие обновления данных"?
...
Рейтинг: 0 / 0
Android. Обновление Activity по таймеру
    #37591741
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если service не устраивает, посмотри в сторону AsyncTask, через него можно обновлять UI.
Хотя imho service гибче,т.к. если не требуется сегодня,может завтра понадобится.
...
Рейтинг: 0 / 0
Android. Обновление Activity по таймеру
    #37591855
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AYTereschenkochpasha,

Ну вроде все понятно, кроме одного: как "подписаться во вьюхе на событие обновления данных"?
паттерн листенер (observer), он ведь в апи андроида повсюду ;)
...
Рейтинг: 0 / 0
Android. Обновление Activity по таймеру
    #37592075
AYTereschenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpasha,

А, ну я думал, что должны быть какие-то встроенные средства для безопасного апдейта UI из фоновых потоков. Нашел Handler#sendMessage(). По-моему это оно самое.
...
Рейтинг: 0 / 0
Android. Обновление Activity по таймеру
    #37592505
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AYTereschenkoА, ну я думал, что должны быть какие-то встроенные средства для безопасного апдейта UI из фоновых потоков. Нашел Handler#sendMessage(). По-моему это оно самое.
Как я уже писал выше
AsyncTask-это как раз то, что вы хотите , а именно "встроенные средства для безопасного апдейта UI из фоновых потоков".
...
Рейтинг: 0 / 0
Android. Обновление Activity по таймеру
    #37593371
AYTereschenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TrogloditAYTereschenkoА, ну я думал, что должны быть какие-то встроенные средства для безопасного апдейта UI из фоновых потоков. Нашел Handler#sendMessage(). По-моему это оно самое.
Как я уже писал выше
AsyncTask-это как раз то, что вы хотите , а именно "встроенные средства для безопасного апдейта UI из фоновых потоков".

В документации к AsyncTask сказано, что создавать и выполнять его можно только из UI-потока. А мне же нужно из фонового потока задачу выполнять, по таймеру. Использовать для этого Activity.runOnUiThread(Runnable)? Как-то сложно получается. Целая матрешка из потоков/вызовов ради одного действия.

А как бы вы решили эту задачу? Нужно раз в минуту забирать данные из инета и обновлять их на экране в конкретном View. Какие классы бы вы использовали и кто кого бы там вызывал?

Кстати, если есть данные, которые нужны только моему приложению и которые нужно сохранить, чтобы они были доступны при следующем запуске приложения, что лучше использовать для хранения этих данных: sqlite, файлы, что-то еще?
...
Рейтинг: 0 / 0
Android. Обновление Activity по таймеру
    #37595247
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запустите его из UI-потока, а вот что написать в doInBackground-это уже другое дело, более того никто не говорить что AsyncTask должен тут же закрыться. Реализуйте срабатывание по таймеру в doInBackground и все будет так, как вы хотели. Советую глянуть доку по AsyncTask, там все замечательно написано.
...
Рейтинг: 0 / 0
Android. Обновление Activity по таймеру
    #37597335
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решение влоб:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
private class GetChangesTask extends AsyncTask<Void, Collection<SomeData>, Void> {
     
      private static final long PAUSE  = 60000;
      private static final long CANCEL_CHECK_INTERVAL = 5000;

      protected Long doInBackground(Void... urls) {
           while (!isCancelled()) {
                Collection<SomeData> changedData = //получить данные
                publishProgress(changedData);
                makePause();
           }           
     }    

     protected void onProgressUpdate(Collection<SomeData>... changedData) {
         //этот метод выполняется в UI thread, здесь можно обновлять данные         
     }

     private void makePause() {
       //не возвращаемся из этого метода 1 минуту,
       //но каждые 5 сек. проверяем, не остановлен ли наш "работник"
       StopWatch sw = new StopWatch(); //commons.lang 
       sw.start();
       while (sw.getTime() < PAUSE && !isCancelled())
                try {
                    TimeUnit.MILLISECONDS.sleep(CANCEL_CHECK_INTERVAL);
                } catch (InterruptedException e) {
                    
                }
     }

     protected void onPostExecute(Void result) {
         
     }
 }



запускаем работника в onResume, останавливаем в onPause
...
Рейтинг: 0 / 0
Android. Обновление Activity по таймеру
    #37597395
vscmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
делай такие вещи в Локал Сервис.
Крути себе Тред по таймауту.
С помощью Бродкаста отсылай данные которые изменились.


sqlite не поможет если данные будут в виде Объектов. И в новой версии к объекту добавили новое поле.
простые типы данных можно.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Android [игнор отключен] [закрыт для гостей] / Android. Обновление Activity по таймеру
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]