在我的Android应用程序中textview.setText()方法阻止ui线程2-3秒

时间:2017-05-19 11:56:59

标签: android

我正在尝试设置一个非常长的字符串。 并且它阻止了UI线程2-3秒。

在异步任务中只有doInBackground()在后​​台,其他函数使用ui线程,我不能在后台线程或setText()中使用doInBackground()?是否有更快的textview替代方案?

2 个答案:

答案 0 :(得分:1)

在onPostExecute()中,您可以更新文本视图。

// This method runs on UI thread.
protected void onPostExecute(String result) {
         addResultToTextView(result);
}

有关详细信息,请参阅https://developer.android.com/reference/android/os/AsyncTask.html

答案 1 :(得分:1)

您需要将工作结果设置为异步任务的onPostExecute()

public class MyAsyncTask extends AsyncTask<Url, Integer, String> {
    protected String doInBackground(URL... urls) {

        // for example, download something

        int count = urls.length;
        long totalSize = 0;
        for (int i = 0; i < count; i++) {
            totalSize += Downloader.downloadFile(urls[i]);
            publishProgress((int) ((i / (float) count) * 100));
            // Escape early if cancel() is called
            if (isCancelled()) break;
        }
        return String.valueOf(totalSize);
    }

    protected void onProgressUpdate(Integer... progress) {
        setProgressPercent(progress[0]);
    }

    protected void onPostExecute(String result) {
        textView.setText(result);
    }
}

此外,您可以在AsyncTask usage

中找到此示例