Android工作室如何创建新线程?
How to make a new thread, Android Studio?
我有以下片段class:
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());
BigDecimal number = ((BigDecimal.valueOf
(bunz.getBaker1()).multiply(BigDecimal.valueOf(.1))));
// ).add((BigDecimal.valueOf(bunz.getBaker2()).multiply(BigDecimal.valueOf(.2)))).
// add((BigDecimal.valueOf
// (bunz.getBaker3()).multiply(BigDecimal.valueOf(.4)))).
// add((BigDecimal.valueOf
// (bunz.getBaker4()).multiply(BigDecimal.valueOf(.8)))).
// add((BigDecimal.valueOf(bunz.getBaker5()).multiply(BigDecimal.valueOf(1)))).
// add((BigDecimal.valueOf(bunz.getBaker6()).multiply(BigDecimal.valueOf(2)))).
// add((BigDecimal.valueOf(bunz.getBaker7()).multiply(BigDecimal.valueOf(4)))).
// add((BigDecimal.valueOf(bunz.getBaker8()).multiply(BigDecimal.valueOf(5)))).
//add((BigDecimal.valueOf(bunz.getBaker9()).multiply(BigDecimal.valueOf(10))));
//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 显示。但是,由于后台有许多不同的进程 运行ning,该线程滞后并出现问题。我怎样才能 运行 在单独的线程上避免这种情况?
编辑:我试过这样的事情:
mHandlerThread = new HandlerThread("yeye");
mHandlerThread.start();
handler = new Handler(mHandlerThread.getLooper());
handler.postDelayed(new Runnable(){
public void run(){
update(view);
handler.postDelayed(this, delay);
}
}, delay);
但没有用!
谢谢!
我遇到了同样的问题。
我的问题的解决方案是创建 3 个可运行程序并以 onCreate()
方法启动它们。
看起来是这样的:
Thread thread = new Thread(runnable);
thread.start();
为了创建可运行的 "object" 只需执行以下操作:
Runnable runnable = new Runnable(){
public void run() {
//some code here
}
};
如果你想要一些延迟的动作,你可以在 runnable 界面中使用 post delayed (注意,postDelayed()
只会重复整个 runnable。你可以通过添加一些条件来避免这种情况)
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...
}
});
P.S。如果你有多个线程并且它们必须在不同的时间启动,你可以从 Runnables 启动它们。
一些有用的页面:
new Runnable() but no new thread?
What's the difference between Thread start() and Runnable run()
How to run a Runnable thread in Android at defined intervals?
When to use handler.post() & when to new Thread()
我有以下片段class:
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());
BigDecimal number = ((BigDecimal.valueOf
(bunz.getBaker1()).multiply(BigDecimal.valueOf(.1))));
// ).add((BigDecimal.valueOf(bunz.getBaker2()).multiply(BigDecimal.valueOf(.2)))).
// add((BigDecimal.valueOf
// (bunz.getBaker3()).multiply(BigDecimal.valueOf(.4)))).
// add((BigDecimal.valueOf
// (bunz.getBaker4()).multiply(BigDecimal.valueOf(.8)))).
// add((BigDecimal.valueOf(bunz.getBaker5()).multiply(BigDecimal.valueOf(1)))).
// add((BigDecimal.valueOf(bunz.getBaker6()).multiply(BigDecimal.valueOf(2)))).
// add((BigDecimal.valueOf(bunz.getBaker7()).multiply(BigDecimal.valueOf(4)))).
// add((BigDecimal.valueOf(bunz.getBaker8()).multiply(BigDecimal.valueOf(5)))).
//add((BigDecimal.valueOf(bunz.getBaker9()).multiply(BigDecimal.valueOf(10))));
//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 显示。但是,由于后台有许多不同的进程 运行ning,该线程滞后并出现问题。我怎样才能 运行 在单独的线程上避免这种情况?
编辑:我试过这样的事情:
mHandlerThread = new HandlerThread("yeye");
mHandlerThread.start();
handler = new Handler(mHandlerThread.getLooper());
handler.postDelayed(new Runnable(){
public void run(){
update(view);
handler.postDelayed(this, delay);
}
}, delay);
但没有用!
谢谢!
我遇到了同样的问题。
我的问题的解决方案是创建 3 个可运行程序并以 onCreate()
方法启动它们。
看起来是这样的:
Thread thread = new Thread(runnable);
thread.start();
为了创建可运行的 "object" 只需执行以下操作:
Runnable runnable = new Runnable(){
public void run() {
//some code here
}
};
如果你想要一些延迟的动作,你可以在 runnable 界面中使用 post delayed (注意,postDelayed()
只会重复整个 runnable。你可以通过添加一些条件来避免这种情况)
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...
}
});
P.S。如果你有多个线程并且它们必须在不同的时间启动,你可以从 Runnables 启动它们。
一些有用的页面:
new Runnable() but no new thread?
What's the difference between Thread start() and Runnable run()
How to run a Runnable thread in Android at defined intervals?
When to use handler.post() & when to new Thread()