在我的服务中,我从互联网上下载了很多东西,并希望每 x 小时执行一次(在首选项中选择)
我在主 Activity 中用这段代码编写的当前实现:
Intent svc = new Intent(this, AlarmService.class);
if (startService(svc)!=null) {
Log.i(this.getClass().toString(), "Service already running");
} else {
Log.i(this.getClass().toString(), "Service Started");
}
因为,根据文档
请求启动给定的应用程序服务。Intent 可以包含要启动的特定服务实现的完整类名,也可以包含要启动的服务种类的操作和其他字段的抽象定义。如果此服务尚未运行,它将被实例化并启动(如果需要,为它创建一个进程);如果它正在运行,那么它仍然在运行。
我强调的最后一句话让我希望我可以在服务的 onCreate 中编写所有繁重的代码并且它不会受到影响,但不幸的是,每次用户启动应用程序时,服务都会再次启动并进行大量下载,耗尽电池。
服务是否正在运行的指示是否正确:
返回 如果服务正在启动或已经在运行,则返回实际启动的服务的 ComponentName;否则,如果服务不存在,则返回 null。
所以,我的问题是,如果服务已经启动,如何让服务保持不变,如果尚未启动,如何启动它?
谢谢
编辑:
服务从未停止:
public class AlarmService extends Service {
Alarm alarm = new Alarm();
public void onCreate() {
super.onCreate();
Log.i("**", "onCreate");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("LocalService", "Received start id " + startId + ": " + intent);
// DO NOTHING FOR TESTING alarm.SetAlarm(this);
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}