java - 如何使服务不断循环?

标签 java android service

我有一个由 BroadcastReceiver 启动的服务,它在引导完成时激活。所以服务启动了,我的 onStartCommand 上有以下内容

public int onStartCommand(Intent intent, int flags, int startId) {
    mQueue = Volley.newRequestQueue(getApplicationContext());

      //FROM NOW ON I WANT IT TO LOOP CONSTANTLY
            JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, API.getDeviceTypes(), null, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {

                    try {
                        processResponse(response);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("mytag", "Error de response");
                    error.printStackTrace();
                }
            });

            mQueue.add(request);
          // LOOP TILL HERE



    return START_STICKY;
}

我希望该服务不断或至少每 3 分钟左右发出一次该请求。我怎样才能做到这一点? 到目前为止,服务启动正常,但当然它只执行这些行一次。

最佳答案

Use Handler for your requirement do not use Thread it will block Main UI Thread

private Handler handler;
private Runnable runnable;


public int onStartCommand(Intent intent, int flags, int startId) {
      handler = new Handler();
        if (runnable != null) {
            runnable = null;
        }
        runnable = new Runnable() {
            @Override
            public void run() {
                // do your stuff here, called every 3 second
                mQueue = Volley.newRequestQueue(getApplicationContext());

      //FROM NOW ON I WANT IT TO LOOP CONSTANTLY
            JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, API.getDeviceTypes(), null, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {

                    try {
                        processResponse(response);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("mytag", "Error de response");
                    error.printStackTrace();
                }
            });

            mQueue.add(request);
                h.postDelayed(this, 3000);
            }
        };

// start it with:
handler.post(runnable);

 return START_STICKY;


}

并且不要忘记根据需要在 onDestroy() 或 onstop 中删除处理程序回调

    handler.removeCallbacks(runnable);
    handler.removeMessages(0);

从这里阅读为什么处理程序更好 difference between Thread and Handler

关于java - 如何使服务不断循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50913996/

相关文章:

angularjs - 在 Angular 1.x 中,拦截器总是工厂吗?

java - JNI 以 unicode 支持启动 jvm

java - Android Studio渲染问题,第一次使用

android - 如何为 WebView 文本选择 handle 着色?

android - 用它的主题、高度和宽度来膨胀布局

service - 事件 : failed (Result: service-start-limit-hit)

服务停止时Android更新当前 Activity

java - 永远不会抛出 UnsupportedEncodingException

java - 以编程方式将多个 jpeg 图像嵌入到 EXCEL 中?

android - 内容适配器和异步回调