为什么我在textView中加载长文本不显示我?¿

时间:2015-07-08 10:24:00

标签: android

我使用来自onCreate()调用的方法的这个新线程。 info是一个textView()。

 new Thread(new Runnable() {
            public void run() {  
                info.post(new Runnable(){
                     public void run() {
                        info.setText(panel.getInfo());
                     }
                  });
            }
       }).start(); 

如果是info.setText(panel.getInfo());没有创建线程的调用需要3-4秒被阻止应用程序但显示它,

然后如何在不被阻止的情况下显示文本?

2 个答案:

答案 0 :(得分:0)

SELECT 
[Extent1].[AnlassID] AS [AnlassID], 
CASE WHEN ([Extent2].[BeurteilungID] IS NULL) THEN 0 ELSE 
[Extent2].[BeurteilungID] END AS [C1], 
CASE WHEN ([Extent4].[PonyID] IS NULL) THEN 0 ELSE [Extent4].[PonyID] END
AS [C2], 
[Extent4].[Name] AS [Name], 
[Extent3].[PonyName1] AS [PonyName1] 
FROM    [sspv].[Anlaesse] AS [Extent1] 
LEFT OUTER JOIN [sspv].[Beurteilung] AS [Extent2] ON [Extent1].[AnlassID] 
= [Extent2].[AnlassID] 
INNER JOIN [sspv].[Rangliste] AS [Extent3] ON [Extent1].[AnlassID] = 
[Extent3].[AnlassId] 
LEFT OUTER JOIN [sspv].[Pony] AS [Extent4] ON [Extent3].[PonyId] =  
[Extent4].[PonyID] 
WHERE 67 = [Extent1].[AnlassID] 

实际上,需要很长时间的是你的panel.getInfo()调用。你在info.post中调用了这个调用,所以你在UI线程中进行调用。

答案 1 :(得分:0)

首先,我认为您应该从$_REQUEST["choose_category"] 方法移动代码String text = panel.getInfo();,因为它将在UI线程中执行。做这样的事情:

info.post

其次,我认为你应该将你的线程保存在类成员中,因为GC可能会在及时执行某些操作之前销毁你的线程。所以,做这样的事情:

new Thread(new Runnable() {
    public void run() {
        String text = panel.getInfo();
        info.post(new Runnable(){
            public void run() {
                info.setText(text);
            }
        });
    }
}).start();

其中mThread是类成员:

mThread = new Thread(new Runnable() {
        public void run() {
            String text = panel.getInfo();
            info.post(new Runnable(){
                public void run() {
                    info.setText(text);
                }
            });
        }
    }).start();