TaskRunner starts the background thread only when needed

Test: libhidl_test
Test: hidl_test
Test: boots
Change-Id: I5b6de5cd4a475b0653102e8004953ba008288ab1
diff --git a/base/TaskRunner.cpp b/base/TaskRunner.cpp
index cd1df05..33117e7 100644
--- a/base/TaskRunner.cpp
+++ b/base/TaskRunner.cpp
@@ -22,7 +22,10 @@
 namespace details {
 
 TaskRunner::TaskRunner() {
-    mQueue = std::make_shared<SynchronizedQueue<Task>>();
+}
+
+void TaskRunner::start(size_t limit) {
+    mQueue = std::make_shared<SynchronizedQueue<Task>>(limit);
 
     // Allow the thread to continue running in background;
     // TaskRunner do not care about the std::thread object.
@@ -35,7 +38,9 @@
 }
 
 TaskRunner::~TaskRunner() {
-    mQueue->push(nullptr);
+    if (mQueue) {
+        mQueue->push(nullptr);
+    }
 }
 
 } // namespace details