@Override
 public void onDestroy() {
   Log.i(TAG, "onDestroy()");
   if (ReceiverService.running()) {
     stopReceiving();
   }
   toast("Message receiver stopped");
   super.onDestroy();
 }
  private void stopReceiving() {
    new Thread(
            new Runnable() {

              @Override
              public void run() {
                synchronized (lock) {
                  InetAddress[] addresses;
                  try {
                    addresses = InetUtils.getLocalAddresses();
                  } catch (SocketException ex) {
                    Log.e(TAG, "", ex);
                    return;
                  }
                  for (int i = 0; i < addresses.length; i++) {
                    try {
                      Socket serv = new Socket(addresses[i], PORT);
                      serv.getOutputStream().write(FLAG_STOP_ALL);
                      serv.close();
                    } catch (IOException ex) {
                      // Log.e(TAG, "", ex);
                      Log.i(TAG, "Address " + addresses[i] + " already stopped");
                    }
                  }
                }
              }
            })
        .start();

    try {
      waiter.acquire();
    } catch (InterruptedException ex) {
      Log.e(TAG, "", ex);
    }
    Log.i(TAG, "Receiving stopped");
    toast("Receiving stopped");
    Intent intent = new Intent(ACTION_UPDATE_RECEIVER);
    sendBroadcast(intent);
  }