Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 19 дек 2018, 14:31

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 88 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
СообщениеДобавлено: 29 июл 2012, 23:00 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.

В этом уроке:


- изучаем IntentService
- включаем режим Foreground для сервиса
- помещаем сервис в автозагрузку




Click here to read this article!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 22 май 2017, 23:49, всего редактировалось 7 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 сен 2012, 09:28 
Аватар пользователя

Зарегистрирован: 26 июл 2012, 10:42
Сообщений: 712
Благодарил (а): 6 раз.
Поблагодарили: 18 раз.
Я не думал, что у некоторых пользователь постоянно сервис будет прибиваться, и это с гигом оперативки. Пришлось перейти на Foreground.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 30 сен 2012, 17:25 
Аватар пользователя

Зарегистрирован: 30 сен 2012, 17:17
Сообщений: 20
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
ИМХО немного спутаны понятия потока и процесса.
Написанно:
Цитата:
Принцип работы этого вида сервиса прост. Он создает новый поток для своей работы. Затем берет все Intent пришедшие ему в onStartCommand и отправляет их на обработку в этот поток.

Цитата:
Здесь необходим конструктор, в котором вызываем конструктор супер-класса и указываем какое-нить имя. Оно будет использовано для наименования потока

Хотя здесь написано правильно:
Цитата:
И далее они поочередно обрабатываются в отдельном процессе методом onHandleIntent


В первых двух случаях поток следует заменить на процесс


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 30 сен 2012, 18:20 

Зарегистрирован: 14 май 2012, 16:18
Сообщений: 372
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Речь во всех трех случаях идет о потоках.
Дополнительно о IntentService можно почитать в официальном руководстве
http://developer.android.com/guide/comp ... entService


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 30 сен 2012, 18:25 
Аватар пользователя

Зарегистрирован: 09 янв 2012, 14:45
Сообщений: 2386
Откуда: Самара
Благодарил (а): 102 раз.
Поблагодарили: 321 раз.
ИМХО, в конце надо убрать на поток.
Сервис создается именно в отдельном потоке, если явно не указать ему что бы создавался в отдельном процессе.

Опоздал немного с ответом =)

_________________
Изображение

А тот ли ты путь выбрал, разработчик?
Хочешь знать ошибки ответ? Загляни в logcat!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 30 сен 2012, 21:32 
Аватар пользователя

Зарегистрирован: 30 сен 2012, 17:17
Сообщений: 20
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Спасибо за исправление. Действительно в доках написано
Цитата:
launch a worker thread
значит везде должен быть поток


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 02 окт 2012, 10:32 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Спасибо! Ща пофиксю

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 окт 2012, 14:29 
Аватар пользователя

Зарегистрирован: 20 июл 2012, 11:31
Сообщений: 508
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
поясните, я не понял, где создавать бродкаст для автозагрузки? В теле кода сервиса или в отдельном файле где-то?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 окт 2012, 14:37 
Аватар пользователя

Зарегистрирован: 26 июл 2012, 10:42
Сообщений: 712
Благодарил (а): 6 раз.
Поблагодарили: 18 раз.
powercat
Необходимо создавать отдельный ресивер и в манифесте прописывать его запуск при загрузке устройства.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 окт 2012, 14:59 
Аватар пользователя

Зарегистрирован: 20 июл 2012, 11:31
Сообщений: 508
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Вот так?
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. public class broadcastReceiver extends BroadcastReceiver {
  2.  
  3.         public void onReceive(Context arg0, Intent arg1) {
  4.                 Log.d("myLogs","onReceive " + arg1.getAction());
  5.                 arg0.startService(new Intent(arg0,MyService.class));
  6.         }
  7.  
  8. }


Сервис не запускается ((


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 окт 2012, 15:10 
Аватар пользователя

Зарегистрирован: 20 июл 2012, 11:31
Сообщений: 508
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
и еще вопрос...сервис запуститься с теми данными, что были в момент перезагрузки телефона? Т.е. у меня там работал таймер, выполнялись операции...что с этим случится?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 окт 2012, 15:19 
Аватар пользователя

Зарегистрирован: 26 июл 2012, 10:42
Сообщений: 712
Благодарил (а): 6 раз.
Поблагодарили: 18 раз.
А в манифесте прописал событие при котором срабатывает ресивер?
Для старта при загрузке:
Код: [ Загрузить ] [ Скрыть ]
Using XML Syntax Highlighting
  1. <intent-filter>
  2.                 <action android:name="android.intent.action.BOOT_COMPLETED" />
  3. </intent-filter>
  4.  

Перед пререзагрузкой устройства:
Код: [ Загрузить ] [ Скрыть ]
Using XML Syntax Highlighting
  1. <intent-filter>
  2.                 <action android:name="android.intent.action.ACTION_SHUTDOWN" />
  3. </intent-filter>
  4.  


По поводу второго вопроса, если ты не сохранил данные сервиса перед выключением устройства, то ты потерял данные, так как при выключении устройства все процессы сервисов просто киляются без вызова у них onDestroy.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 окт 2012, 15:25 
Аватар пользователя

Зарегистрирован: 20 июл 2012, 11:31
Сообщений: 508
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Вот код ресивера (пробовал для сервиса и для активити)
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. public class broadcastReceiver extends BroadcastReceiver {
  2.  
  3.         public void onReceive(Context arg0, Intent arg1) {
  4.                 Log.d("myLogs","onReceive " + arg1.getAction());
  5. //              arg0.startService(new Intent(arg0,MyService.class));
  6.                
  7.                 Intent ativivtyIntent = new Intent(arg0, Activity_Main.class);  
  8.         ativivtyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  9.         arg0.startActivity(ativivtyIntent);
  10.                
  11.         }
  12.  
  13. }

В обоих случаях - форс клос
Вот манифест
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  2. <receiver android:enabled="true" android:name=".BootReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
  3.             <intent-filter>
  4.                 <action android:name="android.intent.action.BOOT_COMPLETED" />
  5.                 <category android:name="android.intent.category.DEFAULT" />
  6.             </intent-filter>
  7.             <intent-filter >
  8.                 <action android:name="android.intent.action.ACTION_SHUTDOWN" />
  9.             </intent-filter>
  10.         </receiver>


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 окт 2012, 15:32 
Аватар пользователя

Зарегистрирован: 20 июл 2012, 11:31
Сообщений: 508
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
косяк запуска нашел - не то имя в манифесте )


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 окт 2012, 15:33 
Аватар пользователя

Зарегистрирован: 20 июл 2012, 11:31
Сообщений: 508
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
а как данные сохранять при перезагрузке, я не понял...
Это надо отловить событие отключения, в том же бродкасте, и на них повесить запись...в базу, например, текущего состояния таймера, например, ???


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 окт 2012, 15:46 
Аватар пользователя

Зарегистрирован: 26 июл 2012, 10:42
Сообщений: 712
Благодарил (а): 6 раз.
Поблагодарили: 18 раз.
Я лично сделал отдельный ресивер на событие отключения и в нем вызываю остановку сервиса. А вся процедура сохранения у меня в onDestroy сервиса. Загрузка данных в onCreate.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 окт 2012, 16:16 
Аватар пользователя

Зарегистрирован: 20 июл 2012, 11:31
Сообщений: 508
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
это понял уже, но не понял процесс сохранения...например, у меня есть таймер с работой по расписанию, в момент отключения девайса он работает, отсчитывает время до следующего действия...и как это сохранить-то?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 02 ноя 2012, 13:52 

Зарегистрирован: 06 авг 2012, 23:29
Сообщений: 4
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Если надо создать напоминание
То что лучше использовать Service с потоком?
Я что-то читал об ManagerAlarm кто-то знает ?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 ноя 2012, 06:26 

Зарегистрирован: 08 ноя 2012, 06:22
Сообщений: 2
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Поясните, плз.
Где именно и как должен вызываться метод startForeground?
(тема не раскрыта полностью в уроке)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 ноя 2012, 11:42 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
BlkDem писал(а):
Поясните, плз.
Где именно и как должен вызываться метод startForeground?
(тема не раскрыта полностью в уроке)

Вызываться должен в сервисе.
А вот насчет "как" - непонятно что вы имеете ввиду. Если речь о параметрах метода, то смотрите Урок 99 про уведомления.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 88 ]  На страницу 1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB