title: Heavy load on thread causing memory issues
body: <p>In the logcat I keep seeing this:</p>
  
  <p>I/art﹕ Background sticky concurrent mark sweep GC freed 141468(7MB) AllocSpace objects, 3(255KB) LOS objects, 25% free, 21MB/29MB, paused 1.228ms total 132.652ms</p>
  
  <p>and this:</p>
  
  <p>W/art﹕ Suspending all threads took:xxx milliseconds</p>
  
  <p>And it causes me to get a <a href="https://stackoverflow.com/questions/31633270/org-apache-http-conn-httphostconnectexception-connection-to-https-plcloud-c6-i">org.apache.http.conn.HttpHostConnectException Connection to https://plcloud.c6.ixsecure.com refused</a> around the last web service method call that I make.</p>
  
  <p>How can I stop the "suspending all threads" and heavy garbage collection usage so that I can get through all of my web service method calls without running into memory issues?</p>
  
  <p>At the moment it gets data from the web service and stores it in a local SQLite database. Here is my code to do so:</p>
  
  <p>Code calling the sync classes "get" methods (which both get the data from the webservice and save it to the sqlite database):</p>
  
  <pre><code>class SyncThread extends Thread {
      @Override
      public void run() {
          try {
              syncHandler.sendEmptyMessage(16);
              Credentials credentials = new Credentials(usernameField
                      .getText().toString(), passwordField.getText()
                      .toString());
              UserCredentialsOut userCredentials = credentials
                      .getCredentials();
  
              if (userCredentials.getReturnCode() == 1) {
                  Settings.getInstance().setEntityId(
                          userCredentials.getEntityId());
  
                  syncHandler.sendEmptyMessage(1);
                  CustomerSync custSync = new CustomerSync(context,
                          syncProgressDialog);
                  Log.i("Customer Sync", "getCustomers");
                  custSync.getCustomers(credentials);
  
                  syncHandler.sendEmptyMessage(2);
                  PetSync petSync = new PetSync(context, syncProgressDialog);
                  Log.i("Pet Sync", "getPets");
                  petSync.getPets(credentials);
  
                  syncHandler.sendEmptyMessage(4);
                  SystemSync systemSync = new SystemSync(context,
                          syncProgressDialog);
                  Log.i("ListValues Sync", "getListValuesInitials");
                  systemSync.getListValuesInitials(credentials);
  
                  syncHandler.sendEmptyMessage(5);
                  Log.i("Vets Sync", "getVets");
                  systemSync.getVets(credentials);
  
                  syncHandler.sendEmptyMessage(6);
                  Log.i("Groomers Sync", "getGroomers");
                  try{
                      systemSync.getGroomers(credentials);
                  }catch (NullPointerException e) {
                      Log.e("NullPointerException", e.getMessage()+"benebne");
                  }
  
                  syncHandler.sendEmptyMessage(7);
                  Log.i("Services Sync", "getServices");
                  systemSync.getServices(credentials);
  
                  syncHandler.sendEmptyMessage(8);
                  Log.i("CalendarDays Sync", "getCalendarDays");
                  systemSync.getCalendarDays(credentials);
  
                  syncHandler.sendEmptyMessage(10);
                  Log.i("loyeeUnavailTimes Sync",
                          "getEmployeeUnavailTimes");
                  systemSync.getEmployeeUnavailTimes(credentials);
  
                  syncHandler.sendEmptyMessage(12);
                  Log.i("Runs Sync", "getRuns");
                  systemSync.getRuns(credentials);
  
                  syncHandler.sendEmptyMessage(14);
                  Log.i("DaycareGroups Sync", "getDaycareGroups");
                  systemSync.getDaycareGroups(credentials);
  
                  syncHandler.sendEmptyMessage(3);
                  OptionsSync optSync = new OptionsSync(context,
                          syncProgressDialog);
                  Log.i("SystemOptions Sync", "getSystemOptions");
                  SystemOptions systemOptions = optSync
                          .getSystemOptions(credentials);
  
                  if (systemOptions != null) {
  
                      if (systemOptions.isModuleGroom()) {
                          syncHandler.sendEmptyMessage(9);
                          PetGroomSync petGroomSync = new PetGroomSync(
                                  context, syncProgressDialog);
                          Log.i("PetGrooms Sync", "getPetGrooms");
                          petGroomSync.getPetGrooms(credentials);
  
                          syncHandler.sendEmptyMessage(11);
                          AppointmentSync appointmentSync = new AppointmentSync(
                                  context, syncProgressDialog);
                          Log.i("Appointments Sync", "getAppointments");
                          appointmentSync.getAppointments(credentials);
                      }
  
                      if (systemOptions.isModuleBoard()) {
                          syncHandler.sendEmptyMessage(13);
                          AppointmentBoardSync appointmentBoardSync = new AppointmentBoardSync(
                                  context, syncProgressDialog);
                          Log.i("ApptBoards Sync", "getApptBoards");
                          appointmentBoardSync.getApptBoards(credentials);
                      }
  
                      if (systemOptions.isModuleDaycare()) {
                          syncHandler.sendEmptyMessage(15);
                          AppointmentDaycareSync appointmentDaycareSync = new AppointmentDaycareSync(
                                  context, syncProgressDialog);
                          Log.i("ApptDayCares Sync", "getApptDayCares");
                          appointmentDaycareSync.getApptDaycares(credentials);
                      }
                  }
  
                  syncHandler.sendEmptyMessage(0);
                  return;
              } else {
                  syncHandler.sendMessage(syncHandler.obtainMessage(-1,
                          userCredentials.getMessage()));
                  return;
              }
  
          } catch (ClientProtocolException e) {
              Log.e("ClientProtocolException", e.toString());
          } catch (IOException e) {
              Log.e("IOException", e.toString());
          } catch (Exception e) {
              Log.e("SyncException", e.toString());
          }
  
          syncHandler.sendMessage(syncHandler.obtainMessage(-1,
                  getString(R.string.connError)));
      }
  }
  </code></pre>
  
  <p>One actual sync class - All sync classes are roughly the same so you only need to see one of them - take note of the "getCustomers" method which calls "initCustomersFromJson" - these are the parts that get the data and then save it to the sqlite db:</p>
  
  <pre><code>public class CustomerSync implements ICustomerSync {
      public static final int QUANTITY = 0;
      private long offset;
      private ProgressDialog progressDialog;
      private Context context;
      private HttpClient client;
      private final String HTTPS_GET_CUSTOMERS = "https://plcloud.c6.ixsecure.com/PLService.svc/GetCustomers";
      private final String GET_URL = "{0}?quant={1}&amp;offset={2}";
      private final String HTTPS_SYNC_CUSTOMERS = "https://plcloud.c6.ixsecure.com/PLService.svc/SyncCustomers";
  
      private CustomerSync() {
          client = new DefaultHttpClient();
      }
  
      public CustomerSync(Context context, ProgressDialog progressDialog) {
          this();
          this.context = context;
          this.progressDialog = progressDialog;
      }
  
      public Customer[] initCustomersFromJson(Credentials credentials)
              throws ClientProtocolException, IOException, URISyntaxException {
          String getUri;
          getUri = MessageFormat.format(GET_URL, HTTPS_GET_CUSTOMERS,
                  QUANTITY + "", offset + "");
  
          credentials.initGetOAuthStructure(HTTPS_GET_CUSTOMERS);
  
          HttpGet request = new HttpGet(getUri + "&amp;"
                  + credentials.getOauthStructure());
          String content = client.execute(request, new BasicResponseHandler());
  
          Gson gson = new GsonBuilder().serializeNulls()
                  .excludeFieldsWithoutExposeAnnotation().create();
          return gson.fromJson(content, Customer[].class);
      }
  
      @Override
      public void getCustomers(Credentials credentials)
              throws ClientProtocolException, IOException, URISyntaxException {
          ICustomerDAO customerDAO = (ICustomerDAO) DAOFactory.getDAO(
                  ICustomerDAO.class.getName(), context);
          customerDAO.open();
  
          Customer[] customers;
  
  
              customers = initCustomersFromJson(credentials);
              progressDialog.setMax(customers.length);
              progressDialog.setProgress(0);
              customerDAO.saveCustomers(customers, progressDialog);
  
              if (customers.length &gt; 0) {
                  offset = customers[customers.length - 1].getId();
              }
  
  
          customerDAO.close();
  
          Settings.getInstance().setLastSyncCustomerDatetime(new Date());
      }
  </code></pre>