Урок 94. Service. Подробно про onStartCommand
Re: Урок 94. Service. Подробно про onStartCommand
START_STICKY_COMPATIBILITY
Исправило ситуацию, было бы здорово отметить это в уроке
Исправило ситуацию, было бы здорово отметить это в уроке
-
- Сообщения: 10
- Зарегистрирован: 23 авг 2013, 13:26
Re: Урок 94. Service. Подробно про onStartCommand
Всем доброго.
Опять акула глухая попалась.
Делаю уроки один в один, не стартует в devices сервис ru.startandroid.develop.p0942servicekillserver.MyService.
Тоже проблемы с файлом манифеста:
На строчке <service android:name="MyService"> показан желтый треугольник с воскл.знаком
Exported service does not require permission
Как поправить?
Опять акула глухая попалась.
Делаю уроки один в один, не стартует в devices сервис ru.startandroid.develop.p0942servicekillserver.MyService.
Тоже проблемы с файлом манифеста:
На строчке <service android:name="MyService"> показан желтый треугольник с воскл.знаком
Exported service does not require permission
Как поправить?
Re: Урок 94. Service. Подробно про onStartCommand
Если ты вначале хочешь сам разобраться с предупреждением или ошибкой, то нажми на этой строке ctrl+1, эклипс предложит тебе вероятные варианты решения этой проблемы. Может быть один из них подойдет.
Данное сообщение переводится как "экспортированный сервис не требует разрешений", я точно не знаю что это, но, возможно, эклипс предложит просто удалить эту строку из манифеста..
Если тебе все же необходимо прописать данное разрешение в манифесте, то попробуй добавить в наименования сервиса
<service android:name=".MyService"
android:exported="false">
Данное сообщение переводится как "экспортированный сервис не требует разрешений", я точно не знаю что это, но, возможно, эклипс предложит просто удалить эту строку из манифеста..
Если тебе все же необходимо прописать данное разрешение в манифесте, то попробуй добавить в наименования сервиса
<service android:name=".MyService"
android:exported="false">
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
-
- Сообщения: 10
- Зарегистрирован: 23 авг 2013, 13:26
Re: Урок 94. Service. Подробно про onStartCommand
А два раза можно благодарить за одно и то же? Спасибо! Помогло!Foenix писал(а):Если ты вначале хочешь сам разобраться с предупреждением или ошибкой, то нажми на этой строке ctrl+1, эклипс предложит тебе вероятные варианты решения этой проблемы. Может быть один из них подойдет.
Данное сообщение переводится как "экспортированный сервис не требует разрешений", я точно не знаю что это, но, возможно, эклипс предложит просто удалить эту строку из манифеста..
Если тебе все же необходимо прописать данное разрешение в манифесте, то попробуй добавить в наименования сервиса
<service android:name=".MyService"
android:exported="false">
Re: Урок 94. Service. Подробно про onStartCommand
Во всех уроках в созданном внутри сервиса потоке используется пауза методом TimeUnit.SECONDS.sleep(15);
У меня при использовании такого метода поток "не оживает" после паузы (оживает только под дебагом).
Хочу спросить: у всех корректно работает этот метод в не основном потоке?
У себя заменил на Thread.sleep(long pause);
У меня при использовании такого метода поток "не оживает" после паузы (оживает только под дебагом).
Хочу спросить: у всех корректно работает этот метод в не основном потоке?
У себя заменил на Thread.sleep(long pause);
Re: Урок 94. Service. Подробно про onStartCommand
Вот у меня там всегда 0, когда должно быть START_FLAG_RETRY по уроку О чём это говорит?В хелпе написано, что flags может принимать значения 0, START_FLAG_RETRY или START_FLAG_REDELIVERY.
На практике я ни разу не встречал значения 0. Постоянно приходит START_FLAG_RETRY. По этому поводу я видел в инете мнение, что это реальный баг системы.
и это совсем не мешает программе исправно перезапускать убитый процесс
а вот START_FLAG_REDELIVERY отображается правильно
Emulator Android 2.2
Re: Урок 94. Service. Подробно про onStartCommand
Вот еще вопрос, через сколько в среднем система "оживляет" сервис? У меня это время колеблется от 2 мин. до 20 часов. Есть способ как-то быстрее "оживлять", а то боюсь придется делать сервис "неубиваемым", что не хотелось бы.
Re: Урок 94. Service. Подробно про onStartCommand
В описании урока написано:
Система может убить сервис, если ей будет не хватать памяти. Но в наших силах сделать так, чтобы наш сервис ожил, когда проблема с памятью будет устранена. И более того, не просто ожил, а еще и снова начал выполнять незавершенные вызовы startService.
У меня сразу эрекция пропала на Service)
Система может убить сервис, если ей будет не хватать памяти. Но в наших силах сделать так, чтобы наш сервис ожил, когда проблема с памятью будет устранена. И более того, не просто ожил, а еще и снова начал выполнять незавершенные вызовы startService.
У меня сразу эрекция пропала на Service)
Re: Урок 94. Service. Подробно про onStartCommand
У меня такая вот проблема: не запускается ни сервис, ни даже если пробую просто запустить другое приложение. Не находятся они.
Unable to start service...: no found.
И по умолчанию проект создавал и копировал из примера. То же самое.
И проблема есть при попытке открыть другое приложение:
intent.setComponent(new ComponentName("com.example.p0931_servicestop",
"MainActivity.java"));
startActivity(intent);
Тоже не находит ничего и вылетает. Хотя проект есть в таком пакете.
Unable to start service...: no found.
И по умолчанию проект создавал и копировал из примера. То же самое.
И проблема есть при попытке открыть другое приложение:
intent.setComponent(new ComponentName("com.example.p0931_servicestop",
"MainActivity.java"));
startActivity(intent);
Тоже не находит ничего и вылетает. Хотя проект есть в таком пакете.
Re: Урок 94. Service. Подробно про onStartCommand
А еще есть вопрос не по этому уроку конкретно.
Часто есть предупреждения, например, на TabActivity или на методы некоторые вроде:
The type TabActivity is deprecated
Что означает это deprecated, что с ним можно сделать?
Часто есть предупреждения, например, на TabActivity или на методы некоторые вроде:
The type TabActivity is deprecated
Что означает это deprecated, что с ним можно сделать?
Re: Урок 94. Service. Подробно про onStartCommand
да. Нужно использовать ActionBar и фрагменты.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 94. Service. Подробно про onStartCommand
такая беда, код как уроке, как решить не знаю.
манифест (
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="le.kh.p0942_servicekillserver"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="10" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<service android:name=".MyService"
android:exported="false">
<intent-filter>
<action android:name="le.kh.p0942servicekillserver.MyService"></action>
</intent-filter>
</service>
</application>
</manifest>
>
)
манифест (
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="le.kh.p0942_servicekillserver"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="10" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<service android:name=".MyService"
android:exported="false">
<intent-filter>
<action android:name="le.kh.p0942servicekillserver.MyService"></action>
</intent-filter>
</service>
</application>
</manifest>
>
)
- Вложения
-
- 1.JPG (286.48 КБ) 20529 просмотров
Re: Урок 94. Service. Подробно про onStartCommand
1. Код нужно оформлять и логи из логкат тоже копируются и оформляются (картинка на 2/3 моего экрана не есть гуд)
2. вероятно android:exported="false" - лишнее в данном случае
2. вероятно android:exported="false" - лишнее в данном случае
Re: Урок 94. Service. Подробно про onStartCommand
1- Хорошо, буду аккуратнее.
2. вероятно android:exported="false" - лишнее в данном случае - не меняет сути (
2. вероятно android:exported="false" - лишнее в данном случае - не меняет сути (
Re: Урок 94. Service. Подробно про onStartCommand
попробуй android:exported="true"Superoleg писал(а):1- Хорошо, буду аккуратнее.
2. вероятно android:exported="false" - лишнее в данном случае - не меняет сути (
Re: Урок 94. Service. Подробно про onStartCommand
Не запускается сервер из клиента (не видно в процессах). Сервер устанавливается вроде нормально... done etc.... Клиент пишет в логе ошибку (см. лог).
Запуск сервиса - MainActivity - стр. 74. Запуск из фрагмента. Может из-за этого... Хотя, мало вероятно.
Помогите разобраться.
Манифест прописал - Service, Intend
Error.log
[syntax=xml]05-02 12:06:58.025: W/ContextImpl(1152): Implicit intents with startService are not safe: Intent { act=com.example.p0942_servicekillserver.MyService (has extras) } android.content.ContextWrapper.startService:494 com.example.p0941_servicekillclient.MainActivity$PlaceholderFragment.onClick:74 android.view.View.performClick:4438
05-02 12:06:58.195: W/ActivityManager(374): Unable to start service Intent { act=com.example.p0942_servicekillserver.MyService (has extras) } U=0: not found[/syntax]
MainActivity.java (Client)
[syntax=java5]package com.example.p0941_servicekillclient;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment implements
OnClickListener {
Button btnStart;
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
btnStart = (Button) rootView.findViewById(R.id.btnStart);
btnStart.setOnClickListener(this);
return rootView;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnStart:
Log.d("myLogs", "btnStart");
getActivity().startService(new Intent(
"com.example.p0942_servicekillserver.MyService")
.putExtra("name", "value"));
break;
default:
break;
}
}
}
}
[/syntax]
Manifest Server
[syntax=java5]<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.p0942_servicekillserver"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="11" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<service android:name="MyService">
<intent-filter android:label="com.example.p0942_servicekillserver.MyService">
</intent-filter>
</service>
</application>
</manifest>[/syntax]
MyService.java
[syntax=java5]package com.example.p0942_servicekillserver;
import java.util.concurrent.TimeUnit;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service {
final String LOG_TAG = "myLogs";
public void onCreate() {
super.onCreate();
Log.d(LOG_TAG, "MyService onCreate");
}
public void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "MyService onDestroy");
}
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(LOG_TAG, "MyService onStartCommand");
readFlags(flags);
MyRun mr = new MyRun(startId);
new Thread(mr).start();
return START_NOT_STICKY;
}
public IBinder onBind(Intent arg0) {
return null;
}
void readFlags(int flags) {
if ((flags & START_FLAG_REDELIVERY) == START_FLAG_REDELIVERY)
Log.d(LOG_TAG, "START_FLAG_REDELIVERY");
if ((flags & START_FLAG_RETRY) == START_FLAG_RETRY)
Log.d(LOG_TAG, "START_FLAG_RETRY");
}
class MyRun implements Runnable {
int startId;
public MyRun(int startId) {
this.startId = startId;
Log.d(LOG_TAG, "MyRun#" + startId + " create");
}
public void run() {
Log.d(LOG_TAG, "MyRun#" + startId + " start");
try {
TimeUnit.SECONDS.sleep(15);
} catch (InterruptedException e) {
e.printStackTrace();
}
stop();
}
void stop() {
Log.d(LOG_TAG, "MyRun#" + startId + " end, stopSelfResult("
+ startId + ") = " + stopSelfResult(startId));
}
}
}[/syntax]
Запуск сервиса - MainActivity - стр. 74. Запуск из фрагмента. Может из-за этого... Хотя, мало вероятно.
Помогите разобраться.
Манифест прописал - Service, Intend
Error.log
[syntax=xml]05-02 12:06:58.025: W/ContextImpl(1152): Implicit intents with startService are not safe: Intent { act=com.example.p0942_servicekillserver.MyService (has extras) } android.content.ContextWrapper.startService:494 com.example.p0941_servicekillclient.MainActivity$PlaceholderFragment.onClick:74 android.view.View.performClick:4438
05-02 12:06:58.195: W/ActivityManager(374): Unable to start service Intent { act=com.example.p0942_servicekillserver.MyService (has extras) } U=0: not found[/syntax]
MainActivity.java (Client)
[syntax=java5]package com.example.p0941_servicekillclient;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment implements
OnClickListener {
Button btnStart;
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
btnStart = (Button) rootView.findViewById(R.id.btnStart);
btnStart.setOnClickListener(this);
return rootView;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnStart:
Log.d("myLogs", "btnStart");
getActivity().startService(new Intent(
"com.example.p0942_servicekillserver.MyService")
.putExtra("name", "value"));
break;
default:
break;
}
}
}
}
[/syntax]
Manifest Server
[syntax=java5]<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.p0942_servicekillserver"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="11" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<service android:name="MyService">
<intent-filter android:label="com.example.p0942_servicekillserver.MyService">
</intent-filter>
</service>
</application>
</manifest>[/syntax]
MyService.java
[syntax=java5]package com.example.p0942_servicekillserver;
import java.util.concurrent.TimeUnit;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service {
final String LOG_TAG = "myLogs";
public void onCreate() {
super.onCreate();
Log.d(LOG_TAG, "MyService onCreate");
}
public void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "MyService onDestroy");
}
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(LOG_TAG, "MyService onStartCommand");
readFlags(flags);
MyRun mr = new MyRun(startId);
new Thread(mr).start();
return START_NOT_STICKY;
}
public IBinder onBind(Intent arg0) {
return null;
}
void readFlags(int flags) {
if ((flags & START_FLAG_REDELIVERY) == START_FLAG_REDELIVERY)
Log.d(LOG_TAG, "START_FLAG_REDELIVERY");
if ((flags & START_FLAG_RETRY) == START_FLAG_RETRY)
Log.d(LOG_TAG, "START_FLAG_RETRY");
}
class MyRun implements Runnable {
int startId;
public MyRun(int startId) {
this.startId = startId;
Log.d(LOG_TAG, "MyRun#" + startId + " create");
}
public void run() {
Log.d(LOG_TAG, "MyRun#" + startId + " start");
try {
TimeUnit.SECONDS.sleep(15);
} catch (InterruptedException e) {
e.printStackTrace();
}
stop();
}
void stop() {
Log.d(LOG_TAG, "MyRun#" + startId + " end, stopSelfResult("
+ startId + ") = " + stopSelfResult(startId));
}
}
}[/syntax]
Тут должна быть подпись.
Re: Урок 94. Service. Подробно про onStartCommand
Сделал без фрагментов, сервис запускается через 15 сек. удаляется, но не находит и не выдает флаги в лог
[syntax=java5] if ((flags & START_FLAG_REDELIVERY) == START_FLAG_REDELIVERY)
Log.d(LOG_TAG, "START_FLAG_REDELIVERY");
if ((flags & START_FLAG_RETRY) == START_FLAG_RETRY)
Log.d(LOG_TAG, "START_FLAG_RETRY");[/syntax]
(нет в логах значения флага)
Хелп, плз.
Log
05-03 04:39:17.074: D/myLogs(1757): MyService onCreate
05-03 04:39:17.074: D/myLogs(1757): MyService onStartCommand, name = value
05-03 04:39:17.084: D/myLogs(1757): MyRun#1 create
05-03 04:39:17.084: D/myLogs(1757): MyRun#1 start
05-03 04:39:32.134: D/myLogs(1757): MyService onDestroy
05-03 04:39:32.144: D/myLogs(1757): MyRun#1 end, stopSelfResult(1) = true
MyService.java
[syntax=java5]package com.example.p0942_servicekillservernofrag;
import java.util.concurrent.TimeUnit;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service {
final String LOG_TAG = "myLogs";
public void onCreate() {
super.onCreate();
Log.d(LOG_TAG, "MyService onCreate");
}
public void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "MyService onDestroy");
}
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(LOG_TAG,
"MyService onStartCommand, name = "
+ intent.getStringExtra("name"));
readFlags(flags);
MyRun mr = new MyRun(startId);
new Thread(mr).start();
return START_STICKY;
}
public IBinder onBind(Intent arg0) {
return null;
}
void readFlags(int flags) {
Log.d(LOG_TAG, "flags");
if ((flags & START_FLAG_REDELIVERY) == START_FLAG_REDELIVERY)
Log.d(LOG_TAG, "START_FLAG_REDELIVERY");
if ((flags & START_FLAG_RETRY) == START_FLAG_RETRY)
Log.d(LOG_TAG, "START_FLAG_RETRY");
}
class MyRun implements Runnable {
int startId;
public MyRun(int startId) {
this.startId = startId;
Log.d(LOG_TAG, "MyRun#" + startId + " create");
}
public void run() {
Log.d(LOG_TAG, "MyRun#" + startId + " start");
try {
TimeUnit.SECONDS.sleep(15);
} catch (InterruptedException e) {
e.printStackTrace();
}
stop();
}
void stop() {
Log.d(LOG_TAG, "MyRun#" + startId + " end, stopSelfResult("
+ startId + ") = " + stopSelfResult(startId));
}
}
}
[/syntax]
[syntax=java5] if ((flags & START_FLAG_REDELIVERY) == START_FLAG_REDELIVERY)
Log.d(LOG_TAG, "START_FLAG_REDELIVERY");
if ((flags & START_FLAG_RETRY) == START_FLAG_RETRY)
Log.d(LOG_TAG, "START_FLAG_RETRY");[/syntax]
(нет в логах значения флага)
Хелп, плз.
Log
05-03 04:39:17.074: D/myLogs(1757): MyService onCreate
05-03 04:39:17.074: D/myLogs(1757): MyService onStartCommand, name = value
05-03 04:39:17.084: D/myLogs(1757): MyRun#1 create
05-03 04:39:17.084: D/myLogs(1757): MyRun#1 start
05-03 04:39:32.134: D/myLogs(1757): MyService onDestroy
05-03 04:39:32.144: D/myLogs(1757): MyRun#1 end, stopSelfResult(1) = true
MyService.java
[syntax=java5]package com.example.p0942_servicekillservernofrag;
import java.util.concurrent.TimeUnit;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service {
final String LOG_TAG = "myLogs";
public void onCreate() {
super.onCreate();
Log.d(LOG_TAG, "MyService onCreate");
}
public void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "MyService onDestroy");
}
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(LOG_TAG,
"MyService onStartCommand, name = "
+ intent.getStringExtra("name"));
readFlags(flags);
MyRun mr = new MyRun(startId);
new Thread(mr).start();
return START_STICKY;
}
public IBinder onBind(Intent arg0) {
return null;
}
void readFlags(int flags) {
Log.d(LOG_TAG, "flags");
if ((flags & START_FLAG_REDELIVERY) == START_FLAG_REDELIVERY)
Log.d(LOG_TAG, "START_FLAG_REDELIVERY");
if ((flags & START_FLAG_RETRY) == START_FLAG_RETRY)
Log.d(LOG_TAG, "START_FLAG_RETRY");
}
class MyRun implements Runnable {
int startId;
public MyRun(int startId) {
this.startId = startId;
Log.d(LOG_TAG, "MyRun#" + startId + " create");
}
public void run() {
Log.d(LOG_TAG, "MyRun#" + startId + " start");
try {
TimeUnit.SECONDS.sleep(15);
} catch (InterruptedException e) {
e.printStackTrace();
}
stop();
}
void stop() {
Log.d(LOG_TAG, "MyRun#" + startId + " end, stopSelfResult("
+ startId + ") = " + stopSelfResult(startId));
}
}
}
[/syntax]
Тут должна быть подпись.
Re: Урок 94. Service. Подробно про onStartCommand
Подскажите, пожалуйста, почему система не видит флаги: START_FLAG_RETRY или START_FLAG_REDELIVERY и константы: START_NOT_STICKY, START_STICKY, START_REDELIVER_INTENT, т.е. лог с выводом флагов в методе readFlag() отсутствует. Если процесс убить при любой возвращаемой константе в методе onStartCommand, процесс не оживает.
Re: Урок 94. Service. Подробно про onStartCommand
Для начала большое спасибо автору за уроки очень много почерпнул. Фактически всему учился по этим урокам. Прошу совета есть сервис который переодически берёт кординаты и отправляет их на сервер. Также он передаёт данные в активность. Реализация задержки происходит обычным бесконечным циклом ну понятное дело с условием на его остановку. И задержкой slep.По факту всё работает. Но очевидно происходит утечка памяти. На реальном девайсе. И следовательно через определённое время втечении часа или получаса приложение убивается системой. Вопрос как мне отловить утечку памяти. Или как переделать сервис чтобы переодически повторял какое-либо действие. Буду очень признателен за совет.
Re: Урок 94. Service. Подробно про onStartCommand
Тебе нужно пересмотреть саму логику процесса. Держать постоянно работающий сервис в памяти, тебе не даст система.Анэрон писал(а):Для начала большое спасибо автору за уроки очень много почерпнул. Фактически всему учился по этим урокам. Прошу совета есть сервис который переодически берёт кординаты и отправляет их на сервер. Также он передаёт данные в активность. Реализация задержки происходит обычным бесконечным циклом ну понятное дело с условием на его остановку. И задержкой slep.По факту всё работает. Но очевидно происходит утечка памяти. На реальном девайсе. И следовательно через определённое время втечении часа или получаса приложение убивается системой. Вопрос как мне отловить утечку памяти. Или как переделать сервис чтобы переодически повторял какое-либо действие. Буду очень признателен за совет.
Для выполнения время от времени какой-либо операции, нужно создавать связку из AlarmManager - > BroadcastReceiver - > Service.
Схема следующая:
1) Создаешь задачу в AlarmManager кидать броадкас через определенные промежутки времени;
2) Ловишь броадкаст и если нужно запускаешь сервис;
3) Выполняешь нужные операции в сервисе без каких-либо таймеров;
4) Освобождаешь ресурсы.