@@ -11,13 +11,12 @@ import android.os.Message
1111import android.os.Messenger
1212import android.os.RemoteException
1313import android.util.Log
14- import java.io.File
15- import java.util.LinkedList
14+ import java.util.concurrent.LinkedBlockingQueue
1615
1716class BuildEnvironmentService : Service () {
1817
1918 companion object {
20- private const val TAG = " BuildEnvironmentService"
19+ private val TAG = BuildEnvironmentService :: class .java.simpleName
2120
2221 const val MSG_EXECUTE_GRADLE = 1
2322 const val MSG_COMMAND_RESULT = 2
@@ -30,28 +29,25 @@ class BuildEnvironmentService : Service() {
3029 }
3130
3231 private lateinit var mMessenger: Messenger
33- private lateinit var mBuildEnvironment: BuildEnvironment
34- private lateinit var mSettingsManager: SettingsManager
35- private lateinit var mWorkThread: HandlerThread
36- private lateinit var mWorkHandler: Handler
32+ private val mBuildEnvironment: BuildEnvironment by lazy {
33+ BuildEnvironment (
34+ applicationContext,
35+ AppPaths .getRootfs(applicationContext).absolutePath,
36+ AppPaths .getProjectDir(applicationContext).absolutePath
37+ )
38+ }
39+ private val mSettingsManager: SettingsManager by lazy { SettingsManager (applicationContext)}
40+ private val mWorkThread = HandlerThread (" BuildEnvironmentServiceWorker" )
41+ private val mWorkHandler: Handler by lazy { Handler (mWorkThread.looper) }
3742
38- internal class WorkItem (public val msg : Message , public val id : Int )
39- private val queue = LinkedList <WorkItem >()
43+ internal data class WorkItem (val msg : Message , val id : Int )
44+ private val queue = LinkedBlockingQueue <WorkItem >()
4045 private var currentItem: WorkItem ? = null
4146
42- private val lock = Object ()
43-
4447 override fun onCreate () {
4548 super .onCreate()
4649
47- val rootfs = AppPaths .getRootfs(this ).absolutePath
48- val projectDir = AppPaths .getProjectDir(this ).absolutePath
49- mBuildEnvironment = BuildEnvironment (this , rootfs, projectDir)
50- mSettingsManager = SettingsManager (this )
51-
52- mWorkThread = HandlerThread (" BuildEnvironmentServiceWorker" )
5350 mWorkThread.start()
54- mWorkHandler = Handler (mWorkThread.looper)
5551
5652 val incomingHandler = object : Handler (Looper .getMainLooper()) {
5753 override fun handleMessage (msg : Message ) {
@@ -83,10 +79,7 @@ class BuildEnvironmentService : Service() {
8379 override fun onBind (intent : Intent ? ): IBinder ? = mMessenger.binder
8480
8581 private fun queueWork (item : WorkItem ) {
86- synchronized(lock) {
87- queue.add(item)
88- lock.notifyAll()
89- }
82+ queue.put(item)
9083 }
9184
9285 private fun cancelWork (id : Int ) {
@@ -97,20 +90,15 @@ class BuildEnvironmentService : Service() {
9790
9891 Log .i(TAG , " Canceling command: ${id} " )
9992
100- synchronized(lock) {
101- if (currentItem?.id == id && currentItem?.msg?.what == MSG_EXECUTE_GRADLE ) {
102- mBuildEnvironment.killCurrentProcess()
103- }
104- queue.removeAll { it.id == id && it.msg.what == MSG_EXECUTE_GRADLE }
93+ if (currentItem?.id == id && currentItem?.msg?.what == MSG_EXECUTE_GRADLE ) {
94+ mBuildEnvironment.killCurrentProcess()
10595 }
96+ queue.removeAll { it.id == id && it.msg.what == MSG_EXECUTE_GRADLE }
10697 }
10798
10899 private fun workerLoop () {
109100 while (true ) {
110- val work: WorkItem = synchronized(lock) {
111- while (queue.isEmpty()) lock.wait()
112- queue.removeFirst()
113- }
101+ val work: WorkItem = queue.take()
114102
115103 currentItem = work
116104 handleMessage(work.msg)
0 commit comments