Android - загрузка файла + уведомление в строке состояния, замедляющее работу телефона

Сейчас у меня asynctask , которая загружает mp3 с сервера. Когда пользователь начинает загружать его, создается уведомление в строке состояния. Это отображает прогресс загрузки в реальном времени. Меня беспокоит только то, что телефон почти слишком тормозит. Есть ли способ задержать отображение прогресса или способ ускорить мой код? Спасибо.

Код ниже:

public class DownloadFile extends AsyncTask<String, String, String> {
    CharSequence contentText;
    Context context;
    CharSequence contentTitle;
    PendingIntent contentIntent;
    int HELLO_ID = 1;
    long time;
    int icon;
    CharSequence tickerText;
    File file;

    public void downloadNotification() {
        String ns = Context.NOTIFICATION_SERVICE;
        notificationManager = (NotificationManager) getSystemService(ns);

        icon = R.drawable.sdricontest;
        //the text that appears first on the status bar
        tickerText = "Downloading...";
        time = System.currentTimeMillis();

        notification = new Notification(icon, tickerText, time);

        context = getApplicationContext();
        //the bold font
        contentTitle = "Your download is in progress";
        //the text that needs to change
        contentText = "0% complete";
        Intent notificationIntent = new Intent(Intent.ACTION_VIEW);
        notificationIntent.setType("audio/*");
        contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

        notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
        notificationManager.notify(HELLO_ID, notification);
    }

    @Override
    protected void onPreExecute() {
        //execute the status bar notification
        downloadNotification();
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... url) {
        int count;
        try {
            URL url2 = new URL(sdrUrl);
            HttpURLConnection connection = (HttpURLConnection) url2.openConnection();
            connection.setRequestMethod("GET");
            connection.setDoOutput(true);
            connection.connect();

            int lengthOfFile = connection.getContentLength();

            //make the stop drop rave folder
            File sdrFolder = new File(Environment.getExternalStorageDirectory() + "/StopDropRave");
            boolean success = false;

            if (!sdrFolder.exists()) {
                success = sdrFolder.mkdir();
            }
            if (!success) {
                String PATH = Environment.getExternalStorageDirectory()
                        + "/StopDropRave/";
                file = new File(PATH);
                file.mkdirs();
            } else {
                String PATH = Environment.getExternalStorageDirectory()
                        + "/StopDropRave/";
                file = new File(PATH);
                file.mkdirs();
            }

            String[] path = url2.getPath().split("/");
            String mp3 = path[path.length - 1];
            String mp31 = mp3.replace("%20", " ");
            String sdrMp3 = mp31.replace("%28", "(");
            String sdrMp31 = sdrMp3.replace("%29", ")");
            String sdrMp32 = sdrMp31.replace("%27", "'");

            File outputFile = new File(file, sdrMp32);
            FileOutputStream fos = new FileOutputStream(outputFile);

            InputStream input = connection.getInputStream();

            byte[] data = new byte[1024];
            long total = 0;
            while ((count = input.read(data)) != -1) {
                total += count;
                publishProgress("" + (int) (total * 100 / lengthOfFile));
                fos.write(data, 0, count);
            }
            fos.close();
            input.close();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public void onProgressUpdate(String... progress) {
        contentText = Integer.parseInt(progress[0]) + "% complete";
        notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
        notificationManager.notify(HELLO_ID, notification);
        super.onProgressUpdate(progress);
    }
}
5
задан Drakonoved 7 March 2018 в 09:07
поделиться