Мне нужно выполнить задание в фоновом режиме, когда вы достигнете запланированного времени. Я назначил задачу пробуждения моей службы до Alarm Manager
, и это хорошо, если приложение является фоновым/бегущим. Сервис продолжает работать нормально на фоне приложения, а также на переднем плане заявляет, если я не изменяю состояние приложения после начала службы. Для того, чтобы хорошо понять приведенный ниже сценарий.Android убьет службу, когда приложение вернется и закроется?
Случай 1:
1.ЗАГРУЗКА до расписания и отправка время менеджер сигнализации и держать приложение работает.
2.Alarm manager вызывает услугу по достижении времени.
3.service начать работать
4.when я закрыть мое приложение прибудете служба остановлена
Случай 2:
1.ЗАГРУЗКА до расписания и отправка время для диспетчера аварийных сигналов и закрытия приложения app.now в фоновом режиме.
2.Alarm manager вызывает услугу по достижении времени.
3.service начать работать
4.Relaunching в app.service продолжающуюся работает/работает отлично.
5. Теперь закрытие приложения и результат обслуживания мертвы.
Я должен вызвать службу только Alarm Manager
, а не каждый раз, когда приложение запускает для этой цели в сервисе onStartCommand
методе я вернулся START_NOT_STICKY
и я не хочу использовать START_STICKY
.if я иду к START_STICKY
он выиграл 't рассмотреть запланированное время. И дело в том, что я не хочу снова проверять время, так как это хорошо работает Alarm Manager
.
Когда приложение работает на низкой памяти, службы становятся уничтоженными. Это решение использует startForeground вместо startService?
Как я могу сделать свою службу стабильной, не беспокоясь о состоянии открытия/закрытия приложения?
график Установка
public void setAction(View v) {
Calendar calendar = Calendar.getInstance();
int hour = Integer.parseInt(HH.getText().toString());
int minute = Integer.parseInt(MM.getText().toString());
int second = Integer.parseInt(SS.getText().toString());
String peried = PP.getText().toString();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
calendar.set(Calendar.AM_PM, peried.equalsIgnoreCase("AM") ? Calendar.AM : Calendar.PM);
Intent myIntent = new Intent(MainActivity.this, MyReceiver.class);
myIntent.putExtra(ACTION,
ACTION_SC_1);
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, REQUEST_CODE_SC_1, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
}
Класс обслуживания
public class MyService extends Service {
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
try {
final String action = intent.getStringExtra(ACTION);
final Handler handler = new Handler();
final Timer timer = new Timer();
final TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
Toast.makeText(MyAlarmService.this, "Running....", Toast.LENGTH_LONG).show();
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 1000, 5000); //execute in every 5000 msdo
// this.stopSelf();
} catch (Exception e) {
//TODO
}
return START_NOT_STICKY;
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Toast.makeText(this, "Killed", Toast.LENGTH_LONG).show();
}
В любом месте в вашей деятельности вы вызываете stopService() mthod? – Chandrakanth
никогда, я не проверял возможные случаи: –
START_STICKY перезапустит службу, немедленно остановленную ОС, и START_REDELIVER_INTENT замедлит перезагрузку :) –