final Progressbar progressbar = (Progressbar) findVIEwByID(R.ID.progressbar_detail);final TextVIEw progresstext = (TextVIEw) findVIEwByID(R.ID.progresstext_detail);final ImageVIEw btnCancel = (ImageVIEw) findVIEwByID(R.ID.imgCancel_detail);progressbar.setVisibility(VIEw.VISIBLE);progresstext.setVisibility(VIEw.VISIBLE);btnCancel.setVisibility(VIEw.VISIBLE);Thread t = new Thread() { public voID run() { ((Activity) ctx).runOnUiThread(new Runnable() { public voID run() { int oldProgress = 0; while (progressbar.getProgress() < 100) { int value = Downloader.progress.get(gameID+ ""); if (value != oldProgress) { oldProgress = value; progressbar.setProgress(value); progresstext.setText(value + " %"); } } } }); }};t.start();
Progressbar的值来自int value = Downloader.progress.get(gameID)并且它是正确的.但是,当我运行此代码时,活动没有响应,也没有显示任何内容(但应用程序没有崩溃).看起来像更新Progressbar的线程正在运行并阻止UI线程,因此活动布局没有显示.
我的代码出了什么问题?在这种情况下更新Progressbar的正确方法是什么?
解决方法 您正在UI线程中运行一段时间(progressbar.getProgress()< 100)(您使用runOnUiThread),因此UI线程将被阻止(并且不会被绘制),直到此循环结束. 您可以:>将runOnUiThread放入循环中,也许在de runOnUiThread调用内部进行休眠.但是,它不是首选的解决方案,因为您使用太多cpu来查找值更改.睡眠接近它有点难看但解决了cpu问题.它会像::
Thread t = new Thread() { public voID run() { int oldProgress = 0; while (progressbar.getProgress() < 100) { ((Activity) ctx).runOnUiThread(new Runnable() { public voID run() { int value = Downloader.progress.get(gameID+ ""); if (value != oldProgress) { oldProgress = value; progressbar.setProgress(value); progresstext.setText(value + " %"); } } } Thread.sleep(500); } }); }};
>以事件方式更新进度条,以便在进度更改时仅调用(在UI线程中)更新代码.这是首选方式.
总结以上是内存溢出为你收集整理的Android如何更新ProgressBar的值?全部内容,希望文章能够帮你解决Android如何更新ProgressBar的值?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)