我创建了一个调用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);
答案 0 :(得分:1)
你应该选择
START_STICKY从onStartCommand(Intent,int,int)返回的常量: 如果此服务的进程在启动时被终止(之后) 从onStartCommand(Intent,int,int)返回,然后将其留在 开始状态,但不保留这个意图。
而不是
START_NOT_STICKY从onStartCommand返回的常量(Intent,int, int):如果此服务的进程在启动时被终止(之后) 从onStartCommand(Intent,int,int)返回,并没有新的 开始意图传递给它,然后从服务中取出服务 开始状态并且不会重新创建,直到将来显式调用 Context.startService(意向)。
如果您希望它在该进程被终止时运行
答案 1 :(得分:0)