我用thread.sleep(100)连续调用methode doSomething()。这发生在UIThread上,因此UIthread没有响应。 Android在单独的线程中运行方法doSomething()或整个someobject的正确方法是什么?
public void loop(){
while(true){
someObject.doSomething();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
现在我正在使用
new Thread(new Runnable() {
@Override
public void run() {
someObject.doSomething();
}
}).start();
这显然会为每次迭代创建一个不同的线程。我不认为这是正确的方法。 Android中的正确方法是什么?
答案 0 :(得分:4)
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
someObject.doSomething();
}
}
}).start();
由于run永远不会返回,所以线程永远不会结束并永远循环。它将大约每100毫秒调用一次doSomething(尽可能接近睡眠,这是不确切的)。
答案 1 :(得分:2)
您可以使用Looper和Handler创建自己的Thread类,每隔100ms发布一次doSomething:
public class MyThread extends Thread{
private Handler myHandler;
@Override
public void run(){
Looper.prepare();
myHandler = new Handler();
myHandler.post(doSomethingRunnable);
}
Runnable doSomethingRunnable = new Runnnable{
doSomething(); //or myHandler.postDelayed() first for greater accuracy, but only if doSomething doesnt take too long
myHandler.postDelayed(doSomethingRunnable, 100);
};
doSomething(){
thisStuff(thatStuff());
}
}
答案 2 :(得分:0)
您可以使用AsyncTask。 doInBackground()
在后台线程上调用,不会阻止UI。这是在后台线程上执行操作的首选方法。
长期运行的任务。您可以使用IntentService并将后台代码放在onHandleIntent
您可以使用基本线程,但可能很难管理。您可以在android here
中阅读有关线程的更多信息