AsyncTask убивает istelf без каких-либо сообщений об ошибках во время отладки - PullRequest
1 голос
/ 04 апреля 2019

У меня очень странная проблема с AsyncTask, которую я использую для загрузки zip-файла в моем приложении для Android. Он работал без сбоев, пока я не решил использовать ресурс strings.xml для каждой строки, связанной с этой задачей.

когда я нажимаю на кнопку загрузки внутри моего приложения, индикатор выполнения AsyncTask на секунду или менее затем закрывается, и задача переходит в состояние onPostExecute ().

Я попытался отладить приложение на своем тестовом устройстве, и в этом задании нет ошибок. Я даже добавил некоторые заглушки с тегом Log.d, я включил результаты logcat:

275-15524/xmc.androidexpert35.com.xtrememusicchecker D/ANDRO_ASYNC: path set
2019-04-04 20:19:22.484 15275-15524/xmc.androidexpert35.com.xtrememusicchecker D/ANDRO_ASYNC: Try block
2019-04-04 20:19:22.487 15275-15524/xmc.androidexpert35.com.xtrememusicchecker D/ANDRO_ASYNC: file url got
2019-04-04 20:19:22.490 15275-15524/xmc.androidexpert35.com.xtrememusicchecker D/ANDRO_ASYNC: opening connection
2019-04-04 20:19:22.515 495-528/? D/SurfaceFlinger: duplicate layer name: changing xmc.androidexpert35.com.xtrememusicchecker/xmc.androidexpert35.com.xtrememusicchecker.SettingsActivity to xmc.androidexpert35.com.xtrememusicchecker/xmc.androidexpert35.com.xtrememusicchecker.SettingsActivity#1
2019-04-04 20:19:22.585 495-794/? D/SurfaceFlinger: duplicate layer name: changing Surface(name=cafcbf6 xmc.androidexpert35.com.xtrememusicchecker/xmc.androidexpert35.com.xtrememusicchecker.SettingsActivity)/@0x3604cd - animation-leash to Surface(name=cafcbf6 xmc.androidexpert35.com.xtrememusicchecker/xmc.androidexpert35.com.xtrememusicchecker.SettingsActivity)/@0x3604cd - animation-leash#1
2019-04-04 20:19:22.614 15275-15275/xmc.androidexpert35.com.xtrememusicchecker I/ViewRootImpl: CPU Rendering VSync enable = true
2019-04-04 20:19:22.672 495-528/? W/SurfaceFlinger: Attempting to set client state on removed layer: xmc.androidexpert35.com.xtrememusicchecker/xmc.androidexpert35.com.xtrememusicchecker.SettingsActivity#1
2019-04-04 20:19:22.672 495-528/? W/SurfaceFlinger: Attempting to destroy on removed layer: xmc.androidexpert35.com.xtrememusicchecker/xmc.androidexpert35.com.xtrememusicchecker.SettingsActivity#1
2019-04-04 20:19:24.758 15275-15314/xmc.androidexpert35.com.xtrememusicchecker D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=3635, firebase_screen_class(_sc)=SettingsActivity, firebase_screen_id(_si)=-6495914915605520780}]
2019-04-04 20:19:26.125 829-3715/? W/NotificationService: Toast already killed. pkg=xmc.androidexpert35.com.xtrememusicchecker callback=android.app.ITransientNotification$Stub$Proxy@3b51651

Это мой код AsyncTask, если кто-нибудь может помочь мне найти проблему? или предложить полезное решение для отладки, чтобы обнаружить его?

Спасибо, любая помощь очень ценится!

public class DownloadFile extends AsyncTask<String, String, String> {

    private static String file_url;
    private Context context;
    private ProgressDialog dialog;
    private String dialogString;
    private File path;
    private String xmpath;
    private boolean canceled = false;

    public DownloadFile(Context cxt) {
        context = cxt;
        dialog = new ProgressDialog(context);
    }
    @Override
    protected void onPreExecute() {
        dialog.setMessage(context.getString(R.string.xm_downloading));
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.setCancelable(false);
        dialog.setButton(DialogInterface.BUTTON_NEGATIVE, context.getString(R.string.xm_cancel), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                path.delete();
                canceled = true;
                dialog.dismiss();

            }
        });
        dialog.show();
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... aurl) {
        int count;
        if (SettingsActivity.isMagisk){
            file_url = "http://androidexpert35developer.altervista.org/Xtrememusic-versions/XTREMEMusic_MAGISK_OFICIAL_By_androidexpert35.zip";
            path= new File(Environment.getExternalStorageDirectory() + "/XTREMEMusic_Download/XTREMEMusic_Magisk.zip");
        }else{
            file_url = "http://androidexpert35developer.altervista.org/Xtrememusic-versions/XTREMEMusic_OFFICIAL_By_androidexpert35.zip";
            path = new File(Environment.getExternalStorageDirectory() + "/XTREMEMusic_Download/XTREMEMusic.zip");
            Log.d("ANDRO_ASYNC","path set");
        }
        try {
            Log.d("ANDRO_ASYNC","Try block");
                URL url = new URL(file_url);
            Log.d("ANDRO_ASYNC","file url got");
                URLConnection conexion = url.openConnection();
            Log.d("ANDRO_ASYNC","opening connection");
                conexion.connect();
            Log.d("ANDRO_ASYNC","Connected");
                int lenghtOfFile = conexion.getContentLength();
                InputStream is = url.openStream();
                File testDirectory = new File(Environment.getExternalStorageDirectory() + "/XTREMEMusic_Download");
            Log.d("ANDRO_ASYNC","making directory");
                if (!testDirectory.exists()) {
                    testDirectory.mkdir();
                }
                FileOutputStream fos;
            Log.d("ANDRO_ASYNC","Stream");
                if(SettingsActivity.isMagisk) {
                     fos = new FileOutputStream(testDirectory + "/" + ("XTREMEMusic_Magisk") + ".zip");
                    Log.d("ANDRO_ASYNC","Downloading");
                }else{
                     fos = new FileOutputStream(testDirectory + "/" + ("XTREMEMusic") + ".zip");
                    Log.d("ANDRO_ASYNC","Downloading");
                }
                byte data[] = new byte[1024];
                long total = 0;
                int progress = 0;
                while ((count = is.read(data)) != -1) {
                    total += count;
                    int progress_temp = (int) total * 100 / lenghtOfFile;
                    publishProgress(""+ progress_temp);
                    if (progress_temp % 10 == 0 && progress != progress_temp) {
                        progress = progress_temp;
                    }
                    fos.write(data, 0, count);
                }
                is.close();
                fos.close();
        } catch (Exception e) {}
        return null;

    }
    protected void onProgressUpdate(String... progress) {
        Log.d("ANDRO_ASYNC",progress[0]);
        dialog.setProgress(Integer.parseInt(progress[0]));
    }

    @Override
    protected void onPostExecute(String unused) {
        dialog.dismiss();
        if(SettingsActivity.isInstall) {
            installer();
        }else if (canceled) {
            Toast.makeText(context, R.string.xm_cancelled, Toast.LENGTH_LONG).show();
        } else{
            xmpath = path.toString();
            Toast.makeText(context, context.getString(R.string.xm_downloaded, xmpath), Toast.LENGTH_LONG).show();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...