Вы можете использовать приемник вещания.Это способ запустить ваш код в определенное время, указанное в ОС Android - например, вы можете запустить его после завершения загрузки Android (здесь я обычно запускаю свои службы.
Лучший способ - этоиспользовать класс AlarmManager и сообщить службе, как часто следует запускать.
Расскажите подробнее о том, что вы пытаетесь сделать, и в чем проблема, и мы можем дать вам более краткий ответ..
ОБНОВЛЕНИЕ:
Вы создали запись в файле manifest.xml для службы?
ОБНОВЛЕНИЕ ЗдесьЭто то, как я делаю это в своем приложении. Это ваш «крючок» к ОС. Он сработает, когда завершит загрузку (для этого не забудьте внести в манифест запись)!
public class TmBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent bootintent) {
try{
Log.i("Taskmotion-ROBOT", "Robot Broadcast signal received on Boot. Trying to start Alarm scheduler");
Intent mServiceIntent = new Intent(context, ServiceAlarm.class);
context.startService(mServiceIntent);
}
catch(Exception e)
{
Log.i("Taskmotion", "Failed to start service...");
}
}
}
Этот приемник Broadcast вызывает службу, которая реализует класс AlarmManager. Диспетчер аварийных сигналов устанавливает расписание для запуска моей службы с заданным интервалом. Обратите внимание, что аварийные сигналы удаляются при выключении телефона, но затем воссоздаются снова.В случае повторения процесса, когда телефон загружается и снова запускает BroadcastReceiver.
public class ServiceAlarm extends Service {
private PendingIntent mAlarmSender;
@Override
public void onCreate() {
try{
Log.i("Taskmotion-ROBOT", "Setting Service Alarm Step 1");
mAlarmSender = PendingIntent.getService(this.getApplicationContext(),
0, new Intent(this.getApplicationContext(), BackgroundService.class), 0);
}
catch(Exception e)
{
Log.i("Taskmotion-ROBOT", "Problem at 1 :" + e.toString());
}
long firstTime = SystemClock.elapsedRealtime();
Log.i("Taskmotion-ROBOT", "Setting Service Alarm Step 2");
// Schedule the alarm!
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME,
firstTime, AlarmManager.INTERVAL_HOUR, mAlarmSender);
this.stopSelf();
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
Я еще не рефакторинг этого кода, это был мой первый опыт.Теперь я вижу, что смотрю на это снова, что я, вероятно, мог бы выполнять планирование внутри BroadcastReceiver, но ради получения чего-то, что работает, я продолжу.
Как указано AlarmManager.INTERVAL_HOURМой сервис будет работать один раз в час.Служба, которую я хочу запустить, определена в pendingIntent (BackgroundService.class).Это где вы положили свой собственный класс обслуживания.Я переделал ваш класс обслуживания для вас и удалил таймер (функциональность заменена на BroadcastReceiver & AlarmManager).
public class BgService extends Service {
private static final String TAG = BgService.class.getSimpleName();
SendJsonRequest sjr;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate(){
super.onCreate();
Log.i(TAG, "Service creating");
//DO YOUR WORK WITH YOUR JSON CLASS HERE
//**************************************
//Make sure to call stopSelf() or your service will run in the background, chewing up
//battery life like rocky mountain oysters!
this.stopSelf();
}
@Override
public void onDestroy(){
super.onDestroy();
}
}