单例线程的含义

时间:2013-01-04 07:41:30

标签: java android multithreading broadcastreceiver

我只是想创建一个线程的单个对象,即单例,这样我在整个应用程序中只创建了一个Thread对象。 每当我打电话时,它的工作都是一样的。我不想让进程在主应用程序线程中运行。

如果从多个位置调用作业,我还想同步作业(runnable完成的工作)。

这个设计会好吗,它的优点和缺点是什么?

我实际上将调用runnable从Android接收器运行(我有几个),这将启动一个服务并调用runnable。

1 个答案:

答案 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();