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) 个答案