Урок 92. Service. Простой пример
Re: Урок 92. Service. Простой пример
и еще в настройках поставлена по всем источникам и в эмуляторе при входе в браузер работает, то есть интернет есть.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 92. Service. Простой пример
Вы учитесь читать то что пишется в логах
Тут говорится что Network провайдера не существует на том устройстве, на котором вы его запускаете. Т.е. нету скорее всего модуля для сим карты на устройстве. возможно вы используете планшет в эмуляторе.java.lang.IllegalArgumentException: provider doesn't exist: network
Re: Урок 92. Service. Простой пример
Но тогда значит и смс и звонок не должно идти? но идут. я поменял виртуальный девайс на другие, все равно так же. Спасибо большое за помощь ))))Mikhail_dev писал(а):Вы учитесь читать то что пишется в логахТут говорится что Network провайдера не существует на том устройстве, на котором вы его запускаете. Т.е. нету скорее всего модуля для сим карты на устройстве. возможно вы используете планшет в эмуляторе.java.lang.IllegalArgumentException: provider doesn't exist: network
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 92. Service. Простой пример
Ну значит так настроен эмулятор. Ошибка однозначная - нет модуля network.
-
- Сообщения: 115
- Зарегистрирован: 08 янв 2015, 14:32
Re: Урок 92. Service. Простой пример
так и не понял про кнопку STOP. Юзаю финальный код урока после всех изменений.
А мы сервис походу не убиваем стопом???
пример:
Без длительных пауз жму START-STOP-START-STOP
и вот логи:
02-03 11:45:41.881: D/myLogs(1383): onCreate
02-03 11:45:41.881: D/myLogs(1383): onStartCommand
02-03 11:45:41.881: D/myLogs(1383): i = 1
02-03 11:45:42.413: D/myLogs(1383): onDestroy
02-03 11:45:42.881: D/myLogs(1383): i = 2
02-03 11:45:42.913: D/myLogs(1383): onCreate
02-03 11:45:42.913: D/myLogs(1383): onStartCommand
02-03 11:45:42.913: D/myLogs(1383): i = 1
02-03 11:45:43.349: D/myLogs(1383): onDestroy
02-03 11:45:43.885: D/myLogs(1383): i = 3
02-03 11:45:43.913: D/myLogs(1383): i = 2
02-03 11:45:44.885: D/myLogs(1383): i = 4
02-03 11:45:44.913: D/myLogs(1383): i = 3
02-03 11:45:45.885: D/myLogs(1383): i = 5
02-03 11:45:45.917: D/myLogs(1383): i = 4
02-03 11:45:46.917: D/myLogs(1383): i = 5
как это понимать??? оно дальше себе работает... причём в двух экземплярах 0_о
заметьте, в 11:45:43 было второе нажатие на кнопку стоп - destroy... а в 11:45:46 продолжают идти логи причём ещё с первого старта сервиса
увеличил цикл до 1000 - всё продолжает работать как ни в чём не бывало... причём логи все двойные(((
если дальше тыкать старт-стоп то количество логов соответсвенно увеличивается
А мы сервис походу не убиваем стопом???
пример:
Без длительных пауз жму START-STOP-START-STOP
и вот логи:
02-03 11:45:41.881: D/myLogs(1383): onCreate
02-03 11:45:41.881: D/myLogs(1383): onStartCommand
02-03 11:45:41.881: D/myLogs(1383): i = 1
02-03 11:45:42.413: D/myLogs(1383): onDestroy
02-03 11:45:42.881: D/myLogs(1383): i = 2
02-03 11:45:42.913: D/myLogs(1383): onCreate
02-03 11:45:42.913: D/myLogs(1383): onStartCommand
02-03 11:45:42.913: D/myLogs(1383): i = 1
02-03 11:45:43.349: D/myLogs(1383): onDestroy
02-03 11:45:43.885: D/myLogs(1383): i = 3
02-03 11:45:43.913: D/myLogs(1383): i = 2
02-03 11:45:44.885: D/myLogs(1383): i = 4
02-03 11:45:44.913: D/myLogs(1383): i = 3
02-03 11:45:45.885: D/myLogs(1383): i = 5
02-03 11:45:45.917: D/myLogs(1383): i = 4
02-03 11:45:46.917: D/myLogs(1383): i = 5
как это понимать??? оно дальше себе работает... причём в двух экземплярах 0_о
заметьте, в 11:45:43 было второе нажатие на кнопку стоп - destroy... а в 11:45:46 продолжают идти логи причём ещё с первого старта сервиса
увеличил цикл до 1000 - всё продолжает работать как ни в чём не бывало... причём логи все двойные(((
если дальше тыкать старт-стоп то количество логов соответсвенно увеличивается
Re: Урок 92. Service. Простой пример
Вполне нормальное явление для ведроида, если вспомнить, что это unix-подобная система.GRAF_COLLIOSTRO писал(а):так и не понял про кнопку STOP. Юзаю финальный код урока после всех изменений.
А мы сервис походу не убиваем стопом???
пример:
Без длительных пауз жму START-STOP-START-STOP
и вот логи:
02-03 11:45:41.881: D/myLogs(1383): onCreate
02-03 11:45:41.881: D/myLogs(1383): onStartCommand
02-03 11:45:41.881: D/myLogs(1383): i = 1
02-03 11:45:42.413: D/myLogs(1383): onDestroy
02-03 11:45:42.881: D/myLogs(1383): i = 2
02-03 11:45:42.913: D/myLogs(1383): onCreate
02-03 11:45:42.913: D/myLogs(1383): onStartCommand
02-03 11:45:42.913: D/myLogs(1383): i = 1
02-03 11:45:43.349: D/myLogs(1383): onDestroy
02-03 11:45:43.885: D/myLogs(1383): i = 3
02-03 11:45:43.913: D/myLogs(1383): i = 2
02-03 11:45:44.885: D/myLogs(1383): i = 4
02-03 11:45:44.913: D/myLogs(1383): i = 3
02-03 11:45:45.885: D/myLogs(1383): i = 5
02-03 11:45:45.917: D/myLogs(1383): i = 4
02-03 11:45:46.917: D/myLogs(1383): i = 5
как это понимать??? оно дальше себе работает... причём в двух экземплярах 0_о
заметьте, в 11:45:43 было второе нажатие на кнопку стоп - destroy... а в 11:45:46 продолжают идти логи причём ещё с первого старта сервиса
увеличил цикл до 1000 - всё продолжает работать как ни в чём не бывало... причём логи все двойные(((
если дальше тыкать старт-стоп то количество логов соответсвенно увеличивается
Суть в том, что цикл запускается каждый раз в отдельном от главного потока службы, и тихо себе там выполняется.
Когда срабатывает onDestroy - убивается поток сервиса, но не тот, в котором выполняется цикл.
Тот, что с циклом, попросту теряется своего родителя и становится так называемым "зомби".
То, что он запускается по нескольку раз - так же нормально: сервисные потоки создаются несколько раз, создают отдельные потоки, и честно выпиливаются, оставляя после себя армию зомби, которая упорно пишет в лог что им и было предписано.
Как из вариантов охоты на зомби - сразу же в начале цикла написать проверку на некий флаг, который будет принудительно вышибать работающий цикл на проверке. А флаг поднимать в методе onDestroy.
Есть еще нормальный вариант - обращаться к android с просьбой выбить получившихся живых мертвецов, но это уже надо стучаться в систему, что, как по мне, для простеньких приложений сложнее и нагруженнее.
Re: Урок 92. Service. Простой пример
Кто-нибудь может пожалуйста внятно объяснить, зачем у сервиса в манифесте атрибут <enabled>???
Согласно хелпу: Whether or not the service can be instantiated by the system — "true" if it can be, and "false" if not. The default value is "true".
То есть если true, то он может создаваться системой, а если false то нет?? Так а зачем вообще передавать false. Если его нельзя инстанциировать, значит им пользоваться как бы нельзя. Я не прав?
Просто у меня слово instantiated ассоциируется с java, где нельзя инстанциировать абстрактные классы, но в этом то есть смысл. А здесь это зачем??
Согласно хелпу: Whether or not the service can be instantiated by the system — "true" if it can be, and "false" if not. The default value is "true".
То есть если true, то он может создаваться системой, а если false то нет?? Так а зачем вообще передавать false. Если его нельзя инстанциировать, значит им пользоваться как бы нельзя. Я не прав?
Просто у меня слово instantiated ассоциируется с java, где нельзя инстанциировать абстрактные классы, но в этом то есть смысл. А здесь это зачем??
Re: Урок 92. Service. Простой пример
Скажите, Вы смогли найти решение вашей задачи? Как?hotdog75rus писал(а):Печально, вопрос решить так и не получается.
Re: Урок 92. Service. Простой пример
Добрый день.
Объясните, пожалуйста, такой нюанс:
Если прописать "System.exit(0);" - сервис благополучно убирается из Android Device Monitor, но Toast не срабатывает (куда бы я его не воткнул)
Если писать без "System.exit(0);" - сервис остается висеть, но Toast показывается как положено.
В обеих случаях "Log.d" работает!
Объясните, пожалуйста, такой нюанс:
Код: Выделить всё
@Override
public void onDestroy() {
Toast.makeText(getApplicationContext(), R.string.ServiceStopped, Toast.LENGTH_SHORT).show();
Log.d("VKI", "Service STOPPED");
super.onDestroy();
System.exit(0);
}
Если писать без "System.exit(0);" - сервис остается висеть, но Toast показывается как положено.
В обеих случаях "Log.d" работает!
Завтра будет.
Лучше.
Лучше.
Re: Урок 92. Service. Простой пример
Привет. Уже не один день ломаю голову над работай сервиса и никак не сдвинусь с места. Решил спросить здесь. Хотя терзают меня сомнения что мне вообще здесь кто-нибудь ответит. Я уже задавал вопросы на форуме, но ответов тут нет, ну попробую спросить.
Есть сервис, который при запуске в лог в течении 10 мин. каждую минуту должен писать сообщение ну или пока я не остановлю его самостоятельно. Код привожу ниже:
MainActivity.java. Имеет две кнопки для запуска и остановки сервиса
MyService.java. Сервис, в файл Service.log на карту памяти пишут нам информацию про его работу. Основная задача сервиса писать каждую минуту в лог информацию.
AndroidManifest.xml
Запускаю приложение, нажимаю кнопку запуска сервиса выхожу с приложения и жду 10 мин. Через 10 мин. захожу в приложения и нажимаю кнопку остановки сервиса.
Смотрим лог:
onCreate (15:36:13)
onStartCommand (15:36:13)
i = 1 (15:36:14)
i = 2 (15:37:14)
onCreate (15:37:20)
onStartCommand (15:37:20)
i = 1 (15:37:20)
i = 2 (15:42:01)
i = 3 (15:46:50)
onDestroy (15:47:38)
По логу видно что сервис стартанул два раза, почему не понятно. Можно предположить что после выхода с приложения кнопкой назад сервис перезапустился, но почему через минуту? Ведь я запустил сервис и затем нажал кнопку назад и тем самым вышел с приложения. Но этот вопрос мне менее интересен. А вот почему далее по прошествии 10 мин. сервис записал только три строчки да и с периодичностью какойто рандом?
Что с кодом не так? Почему лог не пишется каждую минуту? Подскажите плиз. Я уже весь инет перешурстил, ничего не могу понять, почему так происходит, ведь в коде прописанно что каждую минуту писать в лог инфу.
Есть сервис, который при запуске в лог в течении 10 мин. каждую минуту должен писать сообщение ну или пока я не остановлю его самостоятельно. Код привожу ниже:
MainActivity.java. Имеет две кнопки для запуска и остановки сервиса
Код: Выделить всё
package ua.ilexus.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClickStart(View v) {
startService(new Intent(this, MyService.class));
}
public void onClickStop(View v) {
stopService(new Intent(this, MyService.class));
}
}
Код: Выделить всё
package ua.ilexus.myapplication;
import android.app.Service;
import android.content.Intent;
import android.os.Environment;
import android.os.IBinder;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.concurrent.TimeUnit;
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate() {
super.onCreate();
RecLog("onCreate");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
RecLog("onStartCommand");
MyThread();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
RecLog("onDestroy");
}
private void MyThread() {
new Thread(new Runnable() {
public void run() {
try {
for (int i = 1; i<=10; i++) {
RecLog("i = " + i);
TimeUnit.MINUTES.sleep(1);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
stopSelf();
}
}).start();
}
private void RecLog(String message)
{
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
return;
}
String fileDir = Environment.getExternalStorageDirectory().getAbsolutePath();
File sdFile = new File(fileDir, "Service.log");
try {
BufferedWriter bw;
bw = new BufferedWriter(new FileWriter(sdFile, true));
bw.write(message);
Calendar calendar = Calendar.getInstance(java.util.TimeZone.getDefault());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");
bw.write(" (" + simpleDateFormat.format(calendar.getTime()) + ")");
bw.write('\n');
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ua.ilexus.myapplication">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".MyService"
android:enabled="true"
android:exported="false">
</service>
</application>
</manifest>
Смотрим лог:
onCreate (15:36:13)
onStartCommand (15:36:13)
i = 1 (15:36:14)
i = 2 (15:37:14)
onCreate (15:37:20)
onStartCommand (15:37:20)
i = 1 (15:37:20)
i = 2 (15:42:01)
i = 3 (15:46:50)
onDestroy (15:47:38)
По логу видно что сервис стартанул два раза, почему не понятно. Можно предположить что после выхода с приложения кнопкой назад сервис перезапустился, но почему через минуту? Ведь я запустил сервис и затем нажал кнопку назад и тем самым вышел с приложения. Но этот вопрос мне менее интересен. А вот почему далее по прошествии 10 мин. сервис записал только три строчки да и с периодичностью какойто рандом?
Что с кодом не так? Почему лог не пишется каждую минуту? Подскажите плиз. Я уже весь инет перешурстил, ничего не могу понять, почему так происходит, ведь в коде прописанно что каждую минуту писать в лог инфу.
Re: Урок 92. Service. Простой пример
Попробуйте использовать Timer или AlarmManager, вместо Thread.
Завтра будет.
Лучше.
Лучше.
Re: Урок 92. Service. Простой пример
Классы Timer и TimerTask пробовал, тоже самое.
Пробовал вместо TimeUnit.MINUTES.sleep писать Thread.sleep() и метод join(). Не помогает. AlarmManager не пробовал.
Что-то мне подсказывает что где-то в другом собака зарыта. Получается что когда смарт в ждущем режиме тогда происходит какой-то неправильный отчет времени. Сейчас попробую держать постоянно смарт во включенном состоянии для эксперимента.
Пробовал вместо TimeUnit.MINUTES.sleep писать Thread.sleep() и метод join(). Не помогает. AlarmManager не пробовал.
Что-то мне подсказывает что где-то в другом собака зарыта. Получается что когда смарт в ждущем режиме тогда происходит какой-то неправильный отчет времени. Сейчас попробую держать постоянно смарт во включенном состоянии для эксперимента.
Re: Урок 92. Service. Простой пример
Провел эксперимент.
- Открыл приложение, запустил службу, не выходя из приложения не давал телефону перейти в ждущий режим. Вот лог:
- Открыл приложение, запустил службу, вышел из приложения и не давал телефону перейти в ждущий режим. Вот лог:
Получается что когда телефон в ждущем режиме что-то происходит не так. Сервис как будто на какое-то время засыпает (это время почему-то разное) а когда просыпается пишет мне в лог инфу. Может это связанно с тем что я разблокирую телефон и сервис тоже просыпается. Когда блокируется и сервис приостанавливается. Но мне так не нужно, мне нужно что-бы сервис работал. Как это исправить? Может что-то нужно в манифесте прописать? Тестирую на Андроиде 5.1.1. Разные сервисы скачанные с плеймаркета на этом телефоне работают. А вот моя програмулина не хочет.
- Открыл приложение, запустил службу, не выходя из приложения не давал телефону перейти в ждущий режим. Вот лог:
- onCreate (17:50:40)
onStartCommand (17:50:40)
i = 1 (17:50:40)
i = 2 (17:51:40)
i = 3 (17:52:40)
i = 4 (17:53:40)
i = 5 (17:54:40)
i = 6 (17:55:40)
i = 7 (17:56:40)
i = 8 (17:57:40)
i = 9 (17:58:40)
i = 10 (17:59:40)
onDestroy (18:00:40)
- Открыл приложение, запустил службу, вышел из приложения и не давал телефону перейти в ждущий режим. Вот лог:
- onCreate (18:12:08)
onStartCommand (18:12:08)
i = 1 (18:12:09)
onCreate (18:12:27)
onStartCommand (18:12:27)
i = 1 (18:12:27)
i = 2 (18:13:27)
i = 3 (18:14:27)
i = 4 (18:15:27)
i = 5 (18:16:27)
i = 6 (18:17:27)
i = 7 (18:18:27)
i = 8 (18:19:27)
i = 9 (18:20:27)
i = 10 (18:21:27)
onDestroy (18:22:27)
Получается что когда телефон в ждущем режиме что-то происходит не так. Сервис как будто на какое-то время засыпает (это время почему-то разное) а когда просыпается пишет мне в лог инфу. Может это связанно с тем что я разблокирую телефон и сервис тоже просыпается. Когда блокируется и сервис приостанавливается. Но мне так не нужно, мне нужно что-бы сервис работал. Как это исправить? Может что-то нужно в манифесте прописать? Тестирую на Андроиде 5.1.1. Разные сервисы скачанные с плеймаркета на этом телефоне работают. А вот моя програмулина не хочет.
Re: Урок 92. Service. Простой пример
LexusAVG писал(а): Видно что после выхода с приложения система прибила сервис, но сервис запустился снова и отработал все как нужною.
Это написано в уроке 94.Система может убить сервис, если ей будет не хватать памяти. Но в наших силах сделать так, чтобы наш сервис ожил, когда проблема с памятью будет устранена. И более того, не просто ожил, а еще и снова начал выполнять незавершенные вызовы startService.
Т.е. мы вызываем startService, срабатывает onStartCommand и возвращает одну из следующих констант:
START_NOT_STICKY – сервис не будет перезапущен после того, как был убит системой
START_STICKY – сервис будет перезапущен после того, как был убит системой
START_REDELIVER_INTENT – сервис будет перезапущен после того, как был убит системой. Кроме этого, сервис снова получит все вызовы startService, которые не были завершены методом stopSelf(startId).
Завтра будет.
Лучше.
Лучше.
Re: Урок 92. Service. Простой пример
Согласен что система может убить сервис. Но он не убивается а приостанавливается (замораживается). Ведь я его могу остановить, по логу первому видно что сервис был остановлен мной через 10мин. и за это время в лог записано только три строки цикла а должно 10 строк. Если бы система убила бы сервис, то строки "onDestroy (15:47:38)" я бы не увидел. Да и интервал ожидания, если и предположить что система убьет сервис, все равно должен быть минута, а в логе далеко не минута. Первое ожидание 4мин. 41сек., второе 4мин. 49сек., а третье так и не дождался, я остановил сервис.
- onCreate (15:37:20)
onStartCommand (15:37:20)
i = 1 (15:37:20)
i = 2 (15:42:01)
i = 3 (15:46:50)
onDestroy (15:47:38)
Re: Урок 92. Service. Простой пример
Sky-VIN, спасибо за помощь. Я и правда не ожидал что тут на форуме кто-то есть, какой-то он не живой этот форум.
Теперь по делу, вчера копался в просторах инета и набрел на код программы в которой сервисы, он там не один, должны работать в фоне. Первым делом рассматривал манифест и набрел на разрешение <uses-permission android:name="android.permission.WAKE_LOCK"/>. Это разрешение позволяет управлять питанием. Подумал, зачем этой программе управлять питанием и решил разобраться. В общем погуглил, нашел нужную инфу и применил в своем примере. И вот чудо, теперь все работает.
В манифесте прописал разрешение
<uses-permission android:name="android.permission.WAKE_LOCK"/>
В модуле MyService.java в методе onStartCommand дописал
В методе onDestroy дописал
Осталось еще одна непонятная для меня реализация. Почему сервис перезапускается при выходе из приложения?
Теперь по делу, вчера копался в просторах инета и набрел на код программы в которой сервисы, он там не один, должны работать в фоне. Первым делом рассматривал манифест и набрел на разрешение <uses-permission android:name="android.permission.WAKE_LOCK"/>. Это разрешение позволяет управлять питанием. Подумал, зачем этой программе управлять питанием и решил разобраться. В общем погуглил, нашел нужную инфу и применил в своем примере. И вот чудо, теперь все работает.
В манифесте прописал разрешение
<uses-permission android:name="android.permission.WAKE_LOCK"/>
В модуле MyService.java в методе onStartCommand дописал
Код: Выделить всё
PowerManager powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "PARTIAL_WAKE_LOCK");
if (wakeLock != null)
wakeLock.acquire();
Код: Выделить всё
if (wakeLock != null) {
wakeLock.release();
wakeLock = null;
}
Re: Урок 92. Service. Простой пример
Покажите лог сервиса.LexusAVG писал(а):И вот чудо, теперь все работает.
Вероятнее всего это нюансы Android 5.1.1. Тем более система не использует onDestroy. Сами проверьте. При запущеном сервисе, в Диспетчере приложений, убейте свой сервис и посмотрите в лог.LexusAVG писал(а):Осталось еще одна непонятная для меня реализация. Почему сервис перезапускается при выходе из приложения?
Я же на своем HTC One X+ под Android 4.1.2, такого не замечал. У меня сервис убивается только если система загружена.
Вот мой лог:
Код: Выделить всё
[02/03/2016, 13:39:02]: Service created
[02/03/2016, 13:39:02]: Service started
[02/03/2016, 13:39:02]: Online
[02/03/2016, 13:44:08]: Online
[02/03/2016, 13:49:02]: Online
[02/03/2016, 13:54:25]: Online
[02/03/2016, 13:59:25]: Online
[02/03/2016, 14:04:25]: Online
[02/03/2016, 14:09:25]: Online
[02/03/2016, 14:14:25]: Online
[02/03/2016, 14:19:25]: Online
[02/03/2016, 14:24:25]: Online
[02/03/2016, 14:29:21]: Online
[02/03/2016, 14:34:19]: Online
[02/03/2016, 14:39:16]: Online
[02/03/2016, 14:44:03]: No Internet connection!
[02/03/2016, 14:49:12]: No Internet connection!
[02/03/2016, 14:54:11]: No Internet connection!
[02/03/2016, 14:59:08]: No Internet connection!
[02/03/2016, 15:04:05]: No Internet connection!
[02/03/2016, 15:09:04]: Online
[02/03/2016, 15:11:51]: Service created
[02/03/2016, 15:11:51]: Service started
[02/03/2016, 15:12:16]: Online
[02/03/2016, 15:17:38]: Online
[02/03/2016, 15:22:19]: Online
...
и так далее...
Завтра будет.
Лучше.
Лучше.
Re: Урок 92. Service. Простой пример
Сорри, я уже код чуть изменил, а лог удалил, так как описанными выше действиями таймер работает как нужно. Сейчас пробую понять почему сервис так рестартует, и это не связанно с тем что я выхожу с приложения. Хотя может так и должно быть, но меня терзают смутные сомнения.Sky-VIN писал(а):Покажите лог сервиса.LexusAVG писал(а):И вот чудо, теперь все работает.
По настройкам сервис должен в 20:00 что-то выполнить. С помощью TimeUnit.MILLISECONDS.sleep делаю ожидание. В общем запустил сервис в 15:16, вышел с приложения, и в диспечере приложений (так для понимания) тоже выгружаю приложение. В логах вижу вот что:
- StartCommand startId=1 (15:16:33)
StartCommand startId=2 (15:20:29)
StartCommand startId=4 (15:20:56)
StartCommand startId=5 (15:51:38)
Почему сервис уже за это время вызвался 4 раза? Да и где подевался startId=3? Хотя startId=3 мне не сильно интересен.
Re: Урок 92. Service. Простой пример
В общем почитал уроки по сервисам еще раз. Если я сам несколько раз запускаю сервис в логах должно быть:
В примере описанном выше я запускаю сервис один раз, а в логах вижу такое:
- onCreate
onStartCommand startId=1
onStartCommand startId=2
onStartCommand startId=3
onStartCommand startId=4
В примере описанном выше я запускаю сервис один раз, а в логах вижу такое:
- onCreate
onStartCommand startId=1
onCreate
onStartCommand startId=2
onCreate
onStartCommand startId=4
onCreate
onStartCommand startId=5
Re: Урок 92. Service. Простой пример
Для вывода результатов сортировки цикла в фоновом потоке, не в Log а в Toast, нужно использовать Handler:
Код: Выделить всё
void someTask() {
handler.post(new Runnable() {
public void run() {
for (int i = 1; i < 10; i++) {
Toast.makeText(getApplicationContext(), "i = " + i, Toast.LENGTH_SHORT).show();
try {
TimeUnit.SECONDS.sleep(1);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
stopSelf();
}
});
}