每 10 秒进行一次 POST 调用,持续无限时间?

Make a POST call every 10 seconds for an infinite time?

如何让某个函数在无限时间内每 10 秒执行一次?

到目前为止我所做的:我正在从应用程序获取用户的位置值并将它们存储在服务器上。我正在使用一项服务,因此代码会无限期地保持 运行,我正在使用一个广播接收器,因此,如果 phone 被启动,该服务应该再次启动并开始发送我的位置。

问题 在开始的 10-15 分钟内一切正常,但在此之后,服务会自行停止。此外,当用户注册应用程序时,会生成授权令牌。出于安全目的,这些令牌也作为参数之一在 POST 调用中发送。尽管在最初的 10 分钟内工作得很好,但即使这些令牌也丢失了。我将这些标记存储在 SharedPreferences 中。在这方面的任何帮助将不胜感激。

SharedPreferences 代码

Log.i("onCreate", "onCreate");
Log.i("atoken value", ConfirmToken.avalue);
Log.i("utoken value", ConfirmToken.uvalue);
atoken = ConfirmToken.avalue;
utoken = ConfirmToken.uvalue;
Log.i("atoken value", atoken);
Log.i("utoken value", utoken);
Log.i("Starting SharedPref", "Starting SharedPref");
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

SharedPreferences.Editor editor = settings.edit();
editor.putString("atoken", atoken);
editor.putString("utoken", utoken);
editor.commit();
if (settings.contains("atoken")) { 
    atoken = settings.getString("atoken", "nulll");
    Log.i("Inside SharedPref", atoken);
}

if(settings.contains("utoken")) {
    utoken = settings.getString("utoken", "nulll");
    Log.i("Inside Sharedprefs", utoken);
}
//Calling UpdateData here so that values of lat, lng get updated, before they are used by MyService.java
UpdateData();
startService(new Intent(this, MyService.class));

现在,更新数据函数简单地进行 POST 调用,使用这些标记和位置值作为参数。

这就是我每隔几秒 运行 一个任务的方式。请注意,它 运行 在另一个线程中,因此访问 UI 元素需要 runOnUiThread 调用,但由于您在服务中,因此不会有任何问题。

private ScheduledThreadPoolExecutor taskExecutor;

private void stopTimerTask() {
        if (taskExecutor != null)
            taskExecutor.shutdownNow();
        // keep one task at any given time
        taskExecutor = new ScheduledThreadPoolExecutor(1);
    }

    private void startTimerTask() {
        stopTimerTask();
        taskExecutor.scheduleWithFixedDelay(Timer_Tick, TIMER_INITIAL_DELAY, TIMER_PERIOD, TimeUnit.MILLISECONDS);
        Log.d("Pool", "Timer Task Running");
    }

    private Runnable Timer_Tick = new Runnable() {

        @Override
        public void run() {
            // Do something
        }
    };

但是您应该注意 Android OS 可能会在 运行 资源不足或感觉服务正在做太多工作时随时终止您的服务。你应该开始关注如何恢复它的状态,就像其他人一样。

我认为以下是最简单的方法。 还请记住,如果您正在进行网络调用,请发出异步请求,以便您的应用在等待响应时不会停止工作。

for(long startTime = new Date().getTime();new Date().getTime() - startTime ==10000; startTime++)
{ /*your code goes here*/ };

无论您做什么,如果系统资源不足,它都会终止您的 app.Please 让我知道这是否适合您:)