同步处理程序线程
Synchronize handler thread
我正在 运行ning 一个递归处理程序,其中 运行 有一些代码。我正在使用 HandlerThread 发布处理程序。我想 运行 只有在上一个调用完成后才进行下一个递归调用。
有可能这样做吗?如果不是,还有什么选择。
HandlerThread ht = new HandlerThread();
ht.start();
Handler h = new Handler(ht.getLooper());
h.post(new Runnable() {
@override
public void run(){
//Some code
h.postDelay(this,1000);
}
});
您的代码应该可以工作,但是如果您想要一个完整的示例,说明如何使用 HandlerThread
递归地 运行 一些东西,这里是:
public class Main2Activity extends AppCompatActivity {
private MyWorkerThread mWorkerThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
mWorkerThread = new MyWorkerThread("myWorkerThread");
final Runnable task = new Runnable() {
@Override
public void run() {
Log.d("TAG", "Done.");
mWorkerThread.postTask(this);
}
};
mWorkerThread.start();
mWorkerThread.prepareHandler();
mWorkerThread.postTask(task);
}
@Override
protected void onDestroy() {
mWorkerThread.quit();
super.onDestroy();
}
}
class MyWorkerThread extends HandlerThread {
private Handler mWorkerHandler;
public MyWorkerThread(String name) {
super(name);
}
public void postTask(Runnable task){
mWorkerHandler.postDelayed(task, 1000); // set timeout which needed
}
public void prepareHandler(){
mWorkerHandler = new Handler(getLooper());
}
}
不要忘记在 onDestroy
中调用 handlerThread.quit()
我正在 运行ning 一个递归处理程序,其中 运行 有一些代码。我正在使用 HandlerThread 发布处理程序。我想 运行 只有在上一个调用完成后才进行下一个递归调用。 有可能这样做吗?如果不是,还有什么选择。
HandlerThread ht = new HandlerThread();
ht.start();
Handler h = new Handler(ht.getLooper());
h.post(new Runnable() {
@override
public void run(){
//Some code
h.postDelay(this,1000);
}
});
您的代码应该可以工作,但是如果您想要一个完整的示例,说明如何使用 HandlerThread
递归地 运行 一些东西,这里是:
public class Main2Activity extends AppCompatActivity {
private MyWorkerThread mWorkerThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
mWorkerThread = new MyWorkerThread("myWorkerThread");
final Runnable task = new Runnable() {
@Override
public void run() {
Log.d("TAG", "Done.");
mWorkerThread.postTask(this);
}
};
mWorkerThread.start();
mWorkerThread.prepareHandler();
mWorkerThread.postTask(task);
}
@Override
protected void onDestroy() {
mWorkerThread.quit();
super.onDestroy();
}
}
class MyWorkerThread extends HandlerThread {
private Handler mWorkerHandler;
public MyWorkerThread(String name) {
super(name);
}
public void postTask(Runnable task){
mWorkerHandler.postDelayed(task, 1000); // set timeout which needed
}
public void prepareHandler(){
mWorkerHandler = new Handler(getLooper());
}
}
不要忘记在 onDestroy
handlerThread.quit()