gpt4 book ai didi

java - 这段代码有多少应该位于 UI 线程内?

转载 作者:行者123 更新时间:2023-12-01 11:29:05 27 4
gpt4 key购买 nike

所以我有一个AsyncTask在后台做一些工作。这项工作实际上是在 for 循环中完成的命令列表。所有命令都可以运行以下方法(在 for 循环内):

public void print() {
// Create and add a TextView
// Variable "c" is the Activity reference, I get it in the constructor by passing "this" from the Activity
TextView tv = new TextView(c);
// Set its text
tv.setText(text);
// Set the style
tv.setTextColor(Color.WHITE);
tv.setTextSize(fontSize);
tv.setSingleLine(false);
// Add it to the linear layout
display.addView(tv);
// Add a spacer
View spacer = new View(c);
// Set bg color
spacer.setBackgroundColor(Color.argb(0x88, 0, 0, 0));
// Set width and height
spacer.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, separatorHeight));
// Add it to the layout
display.addView(spacer);
// Screen should update
displayChanged = true;
}

在 for 循环的末尾我有这一行:

if (displayChanged) updateScreen();

最后是 updateScreen() 方法:

private void updateScreen() {
// Surround the linear layout with a vertical scroll view
ScrollView scrollView = new ScrollView(c);
scrollView.setVerticalScrollBarEnabled(false);
scrollView.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
scrollView.addView(display);
// Set code background color
scrollView.setBackgroundColor(Color.rgb(0xAA, 0xAA, 0xAA));
// Finally, display everything
c.setContentView(scrollView);
// Screen shouldn't update again
displayChanged = false;
}

如您所见,这两种方法(printupdateScreen)都适用于 View ,并且 updateScreen 还执行 setContentView.现在我想在 AsyncTask 后台线程中运行尽可能多的代码。那么这段代码的多少应该在 runOnUiThread(... code here ...) 中?

最佳答案

您可以在后台线程中设置displayChanged。其余代码使用 UI 工具包,并在除 UIThread 之外的任何内容中访问它被认为是不安全的,并且根据 the documentation Google 不建议这样做。 .

关于java - 这段代码有多少应该位于 UI 线程内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30571189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com