我使用来自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秒被阻止应用程序但显示它,
然后如何在不被阻止的情况下显示文本?
答案 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();