Han*_*ney 11 multithreading android handler
我正在尝试定期执行某项操作.我想创建一个类的新实例,比如说,持续3秒.最好通过使用Handler或Thread来实现它吗?我可以尝试一种更容易,更笨拙的方式吗?我真的不擅长使用线程 - 我想学习,但更重要的是我要在完成编程实践之前让它运行起来.
new Thread(){
public void run(){
//makes sure the player still has 3 lives left
while(game == false){
uiCallback.sendEmptyMessage(0);
try {
Thread.sleep(2000); // wait two seconds before drawing the next flower
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //sleep for 2 seconds
}
}
}.start();
Run Code Online (Sandbox Code Playgroud)
Tra*_*ebb 13
我在我的Android应用程序中做了类似的事情; 我每隔10秒更新一次界面中的一些数据.有很多方法可以做到这一点,但我选择使用a,Handler因为它实现起来非常简单:
Thread timer = new Thread() {
public void run () {
for (;;) {
// do stuff in a separate thread
uiCallback.sendEmptyMessage(0);
Thread.sleep(3000); // sleep for 3 seconds
}
}
});
timer.start();
...
private Handler uiCallback = new Handler () {
public void handleMessage (Message msg) {
// do stuff with UI
}
};
Run Code Online (Sandbox Code Playgroud)
您可能知道,您无法在UI线程中运行此类周期性函数,因为它会阻止UI.这会创建一个Thread在完成后向UI发送消息的新消息,因此您可以使用您的定期函数所做的任何新结果更新UI.
如果您不需要使用此周期函数的结果更新UI,则可以忽略代码示例的后半部分,并生成一个新的Thread,如图所示.但是要注意:如果要修改此新ThreadUI和UI 共享的变量,如果不进行同步,则会遇到问题.一般来说,线程不是一个你想忽略"良好编程实践"的领域,因为你会得到奇怪的,不可预测的错误,你会诅咒你的程序.
-tjw
最简单的方法是postDelayed()在View(例如,小部件)上使用来安排Runnable确实有效,然后重新安排自己.
| 归档时间: |
|
| 查看次数: |
13689 次 |
| 最近记录: |