2

我有一个按钮,当我点击它时,我制作textView.setText()了一个非常大的文本,50000 个符号,界面停止了 3 秒,我该如何解决?

  1. 我试图用 Handle 和 thread 来制作它,但它没有帮助。
  2. 我试着做textview.append(),但它也没有帮助。

                MainActivity.this.runOnUiThread(new Runnable() {
    
                @Override
                public void run() {
    
                    textText.append(rowItemHeader.getText().substring((endOfNews - 10000, endOfNews));
                }
            });
    

    编辑 1 没有结果

private class MyTask extends AsyncTask <Void, Void, String> { String str; TextView txt;

    MyTask(String str, TextView txt){
        this.str = str;
        this.txt = txt;

    }
    public String doInBackground(Void... args) {

        return str.substring(endOfNews - 10000, endOfNews);
    }

    public void onPostExecute(String myString) {
        // do your update here or you will get that error (the original thread one)
        txt.append(myString);
    }
}
4

4 回答 4

0

你是如何声明线程的?你必须使用类似的东西:

this.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            Log.e("TAG synchronize", "synchronize");
        }
});
于 2013-06-24T15:09:43.923 回答
0

将 AyncTask 与以下内容一起使用:

private class MyTask extends AsyncTask<Void, Void, String> {

    private Context context;       

    public MyTask(Context context) {
        this.context = context;
    }

    public String doInBackground(Void... args) {
        // do your job here
        return myString;
    }

    public void onPostExecute(String myString) {
        // do your update here or you will get that error (the original thread one)
        ((TextView)context.findViewById(R.id.textview)).setText(myString);
    }
}

然后在你的活动中

new MyTask(MyActivity.this).execute();
于 2013-06-25T08:25:10.877 回答
0

使用AsyncTask,它们正是您想要的。它们是一个辅助线程,易于设置并从您的主线程执行。

在线程内使用循环appends,将生成的文本的一部分用于TextView使用runOnUiThread(new Runnable(...)...)和调用Thread.sleep(50),这会强制线程休眠那么多毫秒以防止滞后。

于 2013-06-24T15:55:37.640 回答
0

首先,删除视图,然后在后台线程上添加文本,然后再添加视图。如果您需要一些示例代码,请告诉我。

于 2013-06-25T08:31:49.630 回答