>我创建了调用API并获得响应的服务。根据响应,我们更新状态。当应用位于前台时,服务运行良好,但当应用程序被终止时,时间服务将停止并且不会获得 API 响应。
我想要什么:
当服务启动并调用 API 但应用在响应到来之前被用户终止时,服务应继续执行而不重新启动,并且不会停止。请检查以下代码。
public class Send_Service extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
StringRequest request = new StringRequest(Request.Method.POST, url, new
Response.Listener<String>() {
@Override
public void onResponse(String response) {
// my code
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> param = new HashMap<String, String>();
param.putAll(params);
return param;
}
};
request.setShouldCache(false);
// Adding request to request queue
request.setRetryPolicy(new DefaultRetryPolicy(
60000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
RequestQueue mRequestQueue = Volley.newRequestQueue(this);
mRequestQueue.add(request);
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (OutOfMemoryError e) {
}
}
return Service.START_NOT_STICKY;}
清单
<service android:name=".services.Sendfax_Service"
android:enabled="false"
/>
<!--calling service-->
Intent i = new Intent(this, Sendfax_Service.class);
startService(i);
你应该去
START_STICKY 从 onStartCommand(Intent, int, int( 返回的常量: 如果此服务的进程在启动时被终止(之后 从onStartCommand(Intent, int, int(返回(,然后将其保留在 已启动状态,但不保留此交付意向。
而不是
START_NOT_STICKY 从 onStartCommand(Intent, int, 返回的常量( int(:如果此服务的进程在启动时被终止(之后 从onStartCommand(Intent,int,int(返回(,并且没有新的 开始意图以交付给它,然后将服务从 已启动状态,并且在将来显式调用 Context.startService(Intent(.
如果您希望它即使在进程被终止时也能运行
您需要将服务设为前台。https://developer.android.com/guide/components/services.html#Foreground
但对于这种情况,最好使用作业计划 https://developer.android.com/topic/performance/scheduling.html