令人困惑的结果...我有5个ProgressBars处于正常工作状态。

但是一段时间后,UI几乎停滞了。

如何确定我的5个progressBar的处理程序在到达progressBars MAX之后退出?

以下是我活动中进度条之一的示例。

public void doProgressBarA() {

    maskBar4 = (progBar) child2.findViewById(R.id.fragmentB_progressBar4);
    new Thread(new Runnable() {//Start long running op in background thread
        public void run() {
            final SharedPreferences nnn =       getSharedPreferences("com.blagmyname.app", MODE_PRIVATE);
              int spRateValue = nnn.getInt("current_name_number", 0);
            while (m4progressStatus < spRateValue) {
                m4progressStatus += 3;
                // Update the progress bar and display the current value in the text view
                mask4handler.post(new Runnable() {
                    public void run() {
                        maskBar4.setProgress(m4progressStatus);
                    }
                });
                try {   // Sleep for 20 ms to display the progress slowly
                    Thread.sleep(8);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }).start();
}
////////////////////////////////////////////////////////////////////////////

最佳答案

Aysynctask非常适合这种情况。但是,在aysynctask中,您将无法从那里更新GUI。方法doInBackground完成后,您将更新GUI。

我说aysynctask在这种情况下很完美的原因是因为onProgressUpdate()方法。您可以通过它更新进度条。要使用aysynctask,只需在对象上调用.execute()方法。然后,将调用AysyncTask类。您将需要创建此类,并将至少一个AysyncTask方法放入:

android - 7个线程/可运行对象太多了吗?是什么让我的应用程序慢下来了?-LMLPHP

www.willcode4food.net

注意图中的onProgressUpdate方法。从那里,您可以更新进度条,该进度条甚至不需要经常更新:

android - 7个线程/可运行对象太多了吗?是什么让我的应用程序慢下来了?-LMLPHP

xsun.info

我强烈建议您查看android文档和在线获取aysynctask的示例。这并不困难,只需将线程内容复制并粘贴到另一个asyncTask类中即可。

看这个:

http://developer.android.com/reference/android/os/AsyncTask.html

09-26 05:40