我只是想创建一个线程的单个对象,即单例,这样我在整个应用程序中只创建了一个Thread对象。 每当我打电话时,它的工作都是一样的。我不想让进程在主应用程序线程中运行。
如果从多个位置调用作业,我还想同步作业(runnable完成的工作)。
这个设计会好吗,它的优点和缺点是什么?
我实际上将调用runnable从Android接收器运行(我有几个),这将启动一个服务并调用runnable。
答案 0 :(得分:0)
我不认为推荐使用单例线程。如果你想要一个一直在运行的线程实例并处理你的请求,那么考虑使用a HandlerThread,它基本上是一个带有Looper的线程,可以让线程保持运行并等待你的消息。
你在正常线程中执行不覆盖run()
方法,通过连接到handlerThread looper的Handler对象发送消息来与线程通信。这是一个例子:
定义并启动HandlerThread
HandlerThread handlerThread = new HandlerThread("My handler thread");
handlerThread.start();
创建与handlerThread looper关联的处理程序并覆盖handleMessage
Handler handler = new Handler(handlerThread.getLooper()) {
public void handleMessage(Message msg) {
switch (msg.what) {
case DO_SOMETHING:
// do your logic
break;
case DO_ANOTHER_THING:
// do your logic
break;
}
}
}
与您的线程沟通发送消息
Message msg = new Message();
msg.what = DO_SOMETHING; // an arbitrary constant integer
// You can pass extra arguments in msg.arg1, msg.arg2 and msg.obj
handler.sendMessage(msg);
完成后记得停止handlerThread
handlerThread.quit();