Замораживается сервис без Toast'a
На андройде 4.4.2 замораживается сервис, если не выводить Toast по таймеру каждые 2 секунды. Честно говоря, вообще не пойму в чем дело.
Код сервиса:
public class MySerivce extends Service {
public MySerivce () {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onDestroy() {
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("restartservice");
broadcastIntent.setClass(this, BroadcastRestarter.class);
this.sendBroadcast(broadcastIntent);
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast.makeText(FiredataReader.this, "Service destroyed", Toast.LENGTH_SHORT).show();
}
});
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
notificator = new Notificator(FiredataReader.this, 4443, false, false);
Timer timer = new Timer();
timer.schedule(new TimerTask() // вот это чудо
{
@Override
public void run()
{
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast.makeText(FiredataReader.this, TimeManager.getCurrentDateTime(), Toast.LENGTH_SHORT).show();
}
});
}
}, 0, 2000);
return START_REDELIVER_INTENT;
}
}
Суть в том, что даже если вместо Toast'a тупо принтить в Log - сервис висит в запущенных приложениях, но при этом ни на что не реагирует (ест 0 байт оперативки, как пишет android).
Что это такое и что с этим делать?
Ответы (1 шт):
Автор решения: user300058
→ Ссылка
Решил проблему путем добавления рестарта сервиса в onTaskRemoved. (P.S. Такая проблема только на 4.4.2, видимо, ибо на 5+ все работает нормально и без этого)
@Override
public void onTaskRemoved(Intent rootIntent) {
Intent restartService = new Intent(getApplicationContext(),
this.getClass());
restartService.setPackage(getPackageName());
PendingIntent restartServicePI = PendingIntent.getService(
getApplicationContext(), 1, restartService,
PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmService = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() +1000, restartServicePI);
}