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



>我创建了调用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

相关内容

  • 没有找到相关文章

最新更新