有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java应用程序进入黑屏,然后在线程结束后重新启动

好的,我基本上是在制作一个原生的Android“更新”应用程序(使用Java)。应用程序所做的是在单击按钮后从internet下载一些文件

单击“下载”按钮时,将执行函数downloadMaps():

    private void downloadMaps() {
    final DownloadManager downloadmanager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);

    Uri uri = Uri.parse("http://安卓.nsnav.com/update/maps.zip");
    DownloadManager.Request request = new DownloadManager.Request(uri);

    request.setTitle("Maps");


    final long downloadId = downloadmanager.enqueue(request);
    final ProgressBar mProgressBar = (ProgressBar) findViewById(R.id.progressBar2);


    mProgressBar.setVisibility(VISIBLE);

    bUpdateMaps.setVisibility(View.INVISIBLE);
    prompt.setText("Downloading Maps Update");


    new Thread(new Runnable() {

        TextView percentage = (TextView)findViewById(R.id.percentage);
        @Override
        public void run() {


            boolean downloading = true;

            while (downloading) {


                DownloadManager.Query q = new DownloadManager.Query();
                q.setFilterById(downloadId);

                Cursor cursor = downloadmanager.query(q);
                cursor.moveToFirst();
                int bytes_downloaded = cursor.getInt(cursor
                        .getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
                int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));

                if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
                    downloading = false;
                    //registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
                }
                final int dl_progress = (int) ((bytes_downloaded * 100l) / bytes_total);


                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {

                        mProgressBar.setProgress((int) dl_progress);
                        percentage.setText(Integer.toString(dl_progress) + "%");
                        //doTask();
                        if (dl_progress==100){
                            prompt.setText("Installing Maps Update");
                        }
                    }
                });
                cursor.close();
            }

        }
    }).start();



    registerReceiver(onComplete, new IntentFilter(downloadmanager.ACTION_DOWNLOAD_COMPLETE));


}

BroadcastReceiver onComplete=new BroadcastReceiver() {

    public void onReceive(Context ctxt, Intent intent) {
        if (mapsZip){
            unzipFolderMaps();
            deleteMaps();
        }

        prompt.setText("Maps Download Completed!");
        bUpdateMaps.setVisibility(View.INVISIBLE);
    }
};

如您所见,我还在函数中添加了一个线程,用于更新应用程序布局中的圆形进度条

问题是,下载完成后,应用程序会关闭,然后重新启动。并且最后的广播接收机的代码没有执行!下载完成后,如何阻止应用程序崩溃,并成功执行广播接收器的代码


共 (0) 个答案