为什么这项服务会停止?

时间:2014-02-21 11:00:21

标签: android

我有以下用于检查Web API的服务。

实现意味着在发出通知之前重试HTTP请求5次。

无论如何,似乎服务在第一次尝试后就停止了。

请问发生了什么?

public class CreditcheckService extends IntentService {
    public CreditcheckService() {
    super("CreditcheckService");
}

@Override
protected void onHandleIntent(Intent intent) {
    String phone = "";
    phone = intent.getStringExtra("phone");
    checkcreditonline(phone);
    Log.e("inizio il service","inizio il service");

}

private void checkcreditonline(final String phone) {
    final Handler h = new Handler();

    final JsonHttpResponseHandler jsonHttpResponseHandler = new JsonHttpResponseHandler() {
        private int counter = 0;

        @Override
        public void onSuccess(JSONObject arg0) {
            int cazzo=0;
            cazzo++;
            try {
                String status = arg0.getString("credit");

            } catch (JSONException e) {
                e.printStackTrace();
            }

            try {
                String status = arg0.getString("error");

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(Throwable arg0) {
             //IF FAILED SHOULD RETRY, BUT IT DOESN'T
            if (counter < 5) {
                                    //HERE THE SUCCESSIVE ATTEMPTS
                h.postDelayed(new WebserviceRunnable(this, phone), 5000);
            } else {

                NotificationCompat.Builder mBuilder =
                        new NotificationCompat.Builder(CreditcheckService.this)
                        .setSmallIcon(R.drawable.icon)
                        .setContentTitle(getResources().getString(R.string.unable_to))
                        .setContentText(getResources().getString(R.string.please_connect));
                mBuilder.setContentIntent(PendingIntent.getActivity(getApplicationContext(), 0, new Intent(), 0));
                NotificationManager mNotificationManager =
                        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                mNotificationManager.notify(999, mBuilder.build());
            }
            counter++;
        }
    };

    h.post(new WebserviceRunnable(jsonHttpResponseHandler, phone));
}

private class WebserviceRunnable implements Runnable {
    private JsonHttpResponseHandler jsonHttpResponseHandler;
    private String email;

    public WebserviceRunnable(
            JsonHttpResponseHandler jsonHttpResponseHandler, String aEmail) {
        this.jsonHttpResponseHandler = jsonHttpResponseHandler;
        this.email = aEmail;
    }

    public void run() {
        try {
            WebServiceApi.get(
                    "rest/credit/get/" + URLEncoder.encode(email, "utf-8"),
                    null, jsonHttpResponseHandler);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
}

}

1 个答案:

答案 0 :(得分:1)

IntentService中的

onHandleIntent是异步的。

当onHandleIntent退出时,服务停止。

所以不要向Handler发布消息,而是直接在checkcreditonline()中发送消息。