巨大的计算时不会调用runOnUiThread

时间:2016-02-22 17:12:17

标签: java android android-arrayadapter

我的代码是这样的:

new Thread(new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i < 100; i++) {
            myClass somedata = myHugeAndVeryBusyFunction();
                    Log.d(TAG,"PING");
                    final testCallback = "progress is " + i;
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Log.d(TAG,"PONG");
                            textview.setText(testCallback);
                            mAdapter.notifyDataSetChanged();
                        }
                    });
                }
        }
    }).start();

仅在完全执行循环后调用Runnable内的runOnUiThread。 因此,只有在所有计算之后才会调用runnable。是否有可能摆脱这种劣势?

1 个答案:

答案 0 :(得分:0)

您可以使用AsyncTask更新UI。您可以定期从myHugeAndVeryBusyFunction内部调用onProgressUpdate。这将确保UI定期更新,而不是最后更新。但如果myHugeAndVeryBusyFunction是一个巨大的巨石,那么它可能有点难。你将受到调度程序的支配。