¿Cómo evitar el retraso de la interfaz de usuario al actualizar la notificación al descargar el archivo?

Actualmente estoy usandoAsyncTask para descargar un archivo grande en segundo plano dentro de mi aplicación, actualmente el progreso de la descarga se muestra como unProgressDialog que se actualiza a través deonProgressUpdate como a continuación:

protected String doInBackground(String... sUrl) {
        try {
            String destName = sUrl[1];
            file_Delete(destName); // Just to make sure!

            URL url = new URL(sUrl[0]);
            URLConnection connection = url.openConnection();
            connection.connect();
            int fileLength = connection.getContentLength();

            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream(destName);

            byte data[] = new byte[1024];
            long total = 0;
            int count;
            while ((count = input.read(data)) != -1) {
                total += count;
                publishProgress((int) (total * 100 / fileLength));
                output.write(data, 0, count);
            }

            output.flush();
            output.close();
            input.close();

        } catch (Exception e) {
            Log.e(TAG, NAME + ": Error downloading file! " + e.getMessage());
            return e.getMessage();
        }

        return null;
    }

@Override protected void onProgressUpdate(Integer... progress) {
        super.onProgressUpdate(progress);
        DownloadImage.mProgressDialog.setProgress(progress[0]);


    }

Esto funciona bien, sin embargo, ahora quiero usar una notificación en la barra de notificaciones, así que haga un seguimiento de la descarga (ya que el archivo puede ser bastante grande y los usuarios desearían realizar un seguimiento desde fuera de la aplicación).

He intentado el siguiente código, sin embargo, la interfaz de usuario comienza a demorarse, puedo ver que se debe a lapublishProgress Me llaman mucho, así que, ¿cómo podría cambiar el código de fondo para llamar?publishProgress solo cada segundo

@Override protected void onProgressUpdate(Integer... progress) {
        super.onProgressUpdate(progress);
        DownloadImage.mProgressDialog.setProgress(progress[0]);

        DownloadImage.myNotification = new NotificationCompat.Builder(c)
        .setContentTitle("Downloading SlapOS")
        .setContentText("Download is " + progress[0] + "% done")
        .setTicker("Downloading...")
        .setOngoing(true)
        .setWhen(System.currentTimeMillis())
        .setProgress(100, progress[0], false)
        .setSmallIcon(R.drawable.icon)
        .build();

        DownloadImage.notificationManager.notify(1, DownloadImage.myNotification);

    }

Respuestas a la pregunta(2)

Su respuesta a la pregunta