Kas*_*sra 1 java multithreading android
我需要在我的应用中多次调用同一线程。使用我的原始代码,第一次执行就可以了。但是第二次崩溃-然后我得知每个线程只能执行不超过一次。
我的原始代码:
View.OnClickListener myClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
mythread.start();
}
};
Thread mythread = new Thread(){
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
demoBt.setText("Running...");
}
});
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
public void run() {
demoBt.setText("Finished...");
}
});
}
};
Run Code Online (Sandbox Code Playgroud)
因此,正如我所说,如果我尝试第二次运行它,它将崩溃。所以我试着像这样修改它:
View.OnClickListener myClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
test();
}
};
private void test(){
Thread mythread = new Thread(){
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
demoBt.setText("Running...");
}
});
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
public void run() {
demoBt.setText("Finished...");
}
});
}
};
mythread.start();
}
Run Code Online (Sandbox Code Playgroud)
效果很好;但我的问题是,这是执行此操作的正确方法,还是有更优化的方法?
另外,从另一个线程的内部人员调用线程是否可以接受?(就像我在我的新线程中将内容放到UI线程上的方式一样)
编辑:这只是一个例子。对于我的实际代码,我需要进行大量基于数学的模拟,这需要10秒的时间。根据将显示给用户的结果,他们可能希望更改其输入参数,然后再次运行仿真。这将发生几次。
除了关于使用AsyncTask或runOnUiThread()的其他好答案之外,您还可以将私有成员定义为Runnable,如下所示:
private Runnable mytask = new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
demoBt.setText("Running...");
}
});
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
public void run() {
demoBt.setText("Finished...");
}
});
}
};
Run Code Online (Sandbox Code Playgroud)
然后,无论何时要运行它,都要做
new Thread(mytask).start();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6817 次 |
| 最近记录: |