Android 当应用程序被终止时,服务将停止

Android 当应用程序被终止时,服务将停止,android,web-services,service,android-service,Android,Web Services,Service,Android Service,我创建了一个调用API并获得响应的服务。根据响应,我们更新状态。当应用程序位于前台时,服务工作正常,但当应用程序被终止时,时间服务停止,并且没有得到API响应 我想要的是: 当服务启动并调用API,但用户在响应到来之前终止了应用程序时,服务应继续执行而不重新启动,且不应停止。 请检查以下代码 public class Send_Service extends Service { @Override public int onStartCommand(Intent intent,

我创建了一个调用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;}
公共类发送服务扩展服务{
@凌驾
公共int onStartCommand(Intent Intent、int标志、int startId){
StringRequest=新建StringRequest(request.Method.POST,url,新建
Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
//我的代码
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
}) {
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map param=new HashMap();
参数putAll(参数);
返回参数;
}
};
request.setShouldCache(false);
//将请求添加到请求队列
request.setRetryPolicy(新的DefaultRetryPolicy(
60000,
DefaultRetryPolicy.DEFAULT\u最大重试次数,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
RequestQueue MRRequestQueue=Volley.newRequestQueue(此);
mRequestQueue.add(请求);
}
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}捕获(OutOfMemory错误){
}
}
返回服务。启动\u NOT \u STICKY;}
清单

 <service android:name=".services.Sendfax_Service"
        android:enabled="false"
        />
<!--calling service-->
 Intent i = new Intent(this, Sendfax_Service.class);
 startService(i);

意向i=新意向(此,Sendfax_Service.class);
startService(一);
你应该和

从onStartCommand返回的START\u粘性常数(Intent,int,int): 如果此服务的进程在启动时被终止(在 从onStartCommand(Intent,int,int))返回,然后将其保留在 已启动状态,但不保留此交付意图

而不是

从onStartCommand(Intent,int, int):如果此服务的进程在启动时被终止(在 从onStartCommand(Intent,int,int))返回,并且没有新的 开始打算交付给it,然后将服务从 已启动状态,在将来显式调用之前不重新创建 Context.startService(Intent)


如果您想让它即使在进程被终止时也能运行

您需要使您的服务成为前台。


但在这种情况下,最好使用作业调度

在什么设备上进行测试?您是否在其他设备上进行过测试?根据您的解决方案,服务从一开始就重新启动,但我们希望它在应用程序被终止时停止的位置恢复该服务。但不是在所有设备上运行。在定制的操作系统手机上,如MIUI、OPPPO、维梧RedMi等,服务将被扼杀。