boolean isManifestUpdated() {
    if (!mCacheFile.exists()) {
      Log.i("ManifestCheckerService", "updated: cache file does not exist");
      return true;
    }

    try {
      MessageDigest dataDigester = MessageDigest.getInstance("MD5");
      dataDigester.update(mFetcher.getData(), 0, mFetcher.getDataLen());
      byte[] dataDigest = dataDigester.digest();

      MessageDigest fileDigester = MessageDigest.getInstance("MD5");
      FileInputStream is = new FileInputStream(mCacheFile);
      byte[] buf = new byte[4096];
      int len;
      while ((len = is.read(buf)) > 0) {
        fileDigester.update(buf, 0, len);
      }
      is.close();
      byte[] fileDigest = fileDigester.digest();

      if (Arrays.equals(dataDigest, fileDigest)) {
        return false;
      }
      Log.i("ManifestCheckerService", "updated: digests differ");
    } catch (Exception e) {
      Log.e("ManifestFetcher", "caught exception: " + e.getMessage());
      e.printStackTrace();
    }

    return true;
  }
 void writeManifest() {
   try {
     FileOutputStream os = new FileOutputStream(mCacheFile);
     os.write(mFetcher.getData(), 0, mFetcher.getDataLen());
     os.close();
   } catch (Exception e) {
     Log.e("ManifestFetcher", "caught exception: " + e.getMessage());
     e.printStackTrace();
   }
 }
 private void startCheck() {
   if (mFetcher == null) {
     Handler handler = new ManifestFetcherHandler(this);
     mFetcher = new ManifestFetcher(this, handler);
     mFetcher.start();
   }
 }