将大字符串加载到TextView时,android UI冻结

时间:2017-11-23 06:58:07

标签: java android multithreading

我正在学习Android UI线程和后台线程如何处理数据以及如何将后台线程与UI线程通信,反之亦然

例如,使用后台线程,我将使一个字符串的长度大于正常字符串。

StringBuilder builder = new StringBuilder();

@Override
protected String doInBackground(Void... voids) {
    for(int i = 0; i <= 9999; i++){
        builder.append(String.valueOf(i));
    }

    return builder.toString();
}

@Override
protected void onPostExecute(String str) {
    super.onPostExecute(str);
    tvdisplay.setText(str);
}  

现在,当字符串设置为TextView然后UI冻结了一段时间我如何在没有UI冻结的情况下将字符串设置为TextView?或者什么是在不挂起的情况下将大型字符串或数据加载到UI中的有效方法?

1 个答案:

答案 0 :(得分:0)

您只需将文本视图保留在ScrollView中即可。

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"> 
       <ProgressBar
            android:id="@+id/pbLoading"
            android:visibility="invisible"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/tvdisplay"/> 
        </LinearLayout> 
    </ScrollView>