java线程堆栈未完全执行,并切换到我的线程堆栈
有一个函数从Firebase数据库接收数据,并由此创建列表。我需要在单独的线程中执行此操作。我尝试过这样做,但看起来有些代码是在一个侧线程中执行的,有些是在我的线程中执行的
乐趣:
fun initUserTracks() {
userTracks = mutableListOf()
REF_DATABASE_ROOT.child(NODE_TRACKS).child(UID)
.addListenerForSingleValueEvent(AppValueEventListener {
thread {
it.children.forEach { trackID ->
Log.d("dbThread", Thread.currentThread().name)
var userTrack = UserTrack(TYPE_CONTENT)
userTrack.distance =
trackID.child(CHILD_DISTANCE).getValue(Double::class.java)!!
userTrack.time = LocationConverter.convertMStoTime(
trackID.child(CHILD_TIME).getValue(Long::class.java)!!
)
userTrack.startTime =
timeToDate(
trackID.child(CHILD_START_TIME).getValue(Long::class.java)!!
)
REF_DATABASE_ROOT.child(NODE_TRACKS).child(UID)
.child(trackID.key.toString()).child(
CHILD_TRACK_POINTS
).addListenerForSingleValueEvent(AppValueEventListener { tracks ->
tracks.children.forEach { points ->
Log.d("dbThread", Thread.currentThread().name)
var pointsList = mutableListOf<Point>()
points.children.forEach { point ->
pointsList.add(
Point(
point.child(CHILD_LATITUDE)
.getValue(Double::class.java) as Double,
point.child(CHILD_LONGITUDE)
.getValue(Double::class.java) as Double
)
)
}
userTrack.trackPoints = pointsList
}
userTracks.add(userTrack)
}
)
}
}
})
}
如果您查看日志,结果如下所示:
2020-10-17 16:07:31.015 29067-29165/com.example.gotracker D/dbThread: Thread-19
2020-10-17 16:07:31.048 29067-29165/com.example.gotracker D/dbThread: Thread-19
2020-10-17 16:07:31.177 29067-29067/com.example.gotracker D/dbThread: main
2020-10-17 16:07:31.304 29067-29067/com.example.gotracker D/dbThread: main
但是我需要线程{}内的所有内容都在一个侧线程中执行。怎么了
# 1 楼答案
我能够在一个线程中完成这一点:
日志:
2020-10-2412:39:41.71915347-15455/com。实例gotracker D/dbThread:pool-4-thread-1
2020-10-24 12:39:42.02515347-15455/com。实例gotracker D/dbThread:pool-4-thread-1