我有以下片段类:public class fragment1 extends Fragment { private TextView bunz_count; private TextView money_count; private Bunz bunz; private Handler handler; int delay = 1000; View view; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { bunz = Bunz.getInstance(); handler = new Handler(); view = inflater.inflate(R.layout.fragment1, container, false); handler.postDelayed(new Runnable(){ public void run(){ update(view); handler.postDelayed(this, delay); } }, delay); return view; } public void update(View view){ bunz_count = (TextView) view.findViewById(R.id.final_bunz_count); money_count = (TextView) view.findViewById(R.id.final_money_count); //System.out.println(bunz.getBaker1()); //System.out.println(number); bunz.setBunz(bunz.getBunz().add((number))); bunz_count.setText("Bunz: " + bunz.getBunz()); money_count.setText("Money: " + bunz.getMoney()); System.out.println("bunz" + bunz.getBunz()); }}更新玩家货币的 UI 显示。但是,由于有许多不同的进程在后台运行,该线程会滞后并出现问题。我怎样才能在单独的线程上运行它来避免这种情况?
1 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
我也遇到过同样的问题。
我的问题的解决方案是创建 3 个可运行对象并在onCreate()Method 中启动它们。
看起来像这样:
Thread thread = new Thread(runnable);
thread.start();
为了创建可运行的“对象”,只需执行以下操作:
Runnable runnable = new Runnable(){
public void run() {
//some code here
}
};
如果您想要一些延迟操作,您可以在可运行界面中使用延迟后(注意,postDelayed()只会重复整个可运行。您可以通过添加一些条件来避免这种情况)
Runnable runnable = new Runnable(){
public void run() {
//some code here
handler.postDelayed(this, 1000);
}
};
如果你想更新 GUI,你应该在你的 runnable 中调用以下命令:
handler.post(new Runnable() {
@Override
public void run () {
// upate textFields, images etc...
}
});
PS 如果你有多个线程并且它们必须在不同的时间启动,你可以从 Runnables 启动它们。
添加回答
举报
0/150
提交
取消