Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Start\u redeliver\u重新启动服务需要很长时间(小时)_Java_Android_Cordova_Service - Fatal编程技术网

Java Android Start\u redeliver\u重新启动服务需要很长时间(小时)

Java Android Start\u redeliver\u重新启动服务需要很长时间(小时),java,android,cordova,service,Java,Android,Cordova,Service,我目前正在制作一个应用程序,用于轮询gps数据并将其上传到服务器。该服务在应用程序位于前台时启动,并在应用程序进入后台时保持运行。当应用程序被刷卡关闭时,将调用onTaskRemoved,报警管理器将重新启动该服务。该服务是一个IntentService,具有一个异步任务来发布gps坐标 这就是奇怪发生的地方。应用程序在前台停留的时间越长,Android使用START\u REDELIVER\u INTENT作为onstart中的返回命令重启它所需的时间就越长。这项服务很少被安卓系统终止,但一旦

我目前正在制作一个应用程序,用于轮询gps数据并将其上传到服务器。该服务在应用程序位于前台时启动,并在应用程序进入后台时保持运行。当应用程序被刷卡关闭时,将调用onTaskRemoved,报警管理器将重新启动该服务。该服务是一个IntentService,具有一个异步任务来发布gps坐标

这就是奇怪发生的地方。应用程序在前台停留的时间越长,Android使用START\u REDELIVER\u INTENT作为onstart中的返回命令重启它所需的时间就越长。这项服务很少被安卓系统终止,但一旦终止,它可能需要很长时间才能重新启动,这取决于它在前台的时间。(?)我想

出于测试目的,我删除了重新启动应用程序的报警管理器,因此当我关闭应用程序时,android将使用START\u REDELIVER\u意图重新启动它。如果我打开应用程序30秒,意味着后台服务运行30秒,然后滑动应用程序关闭,Android将在不到一分钟内重新启动

但如果我启动应用程序,在后台启动服务,然后让应用程序在前台运行10分钟,那么当我滑动应用程序关闭时,Android可能需要一个多小时才能重新启动服务。在这10分钟内,应用程序每30秒轮询一次gps,并使用异步任务每5分钟上载一次coords。我不知道发生了什么事。我甚至不能完全确定它是否与应用程序在前台有关,但我可以通过计时应用程序在前台的时间来反复复制它,这似乎与安卓重启服务所需的时间成正比

伙计,我知道这听起来很疯狂,但我希望不是

另外,我在应用程序本身中使用了Cordova/javascript,但服务都是Java。这是我的onCreate和onStart命令。不知道我还应该发布什么

@Override
public void onCreate() {
    super.onCreate();
    //Log.i(TAG, "OnCreate");
    locationManager  = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 0, this);
    registerReceiver(sendHTMLReceiver, new IntentFilter("html_alarm"));
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent != null) {
        isCheckedIn = intent.getExtras().getBoolean("checkedIn");
        showNotification("Courtesy Checkout Enabled");
    }

    return START_REDELIVER_INTENT;
}

我在使用START_Stick Service时遇到了类似的问题。我正面临着完全相同的问题,我正在后台进行蓝牙扫描。您是否找到了任何解决方案,如果是,请与我们分享。谢谢我离开了服务和alarmmanager,使用新的jobscheduler启动作业,轮询gps,在异步任务中将数据发送到服务器,然后停止作业。作业设置为每2分钟重复一次,因此新作业开始并重新开始。这比服务/报警管理器工作得更好。