在我的应用中,我有一个ViewPager,它有大约10个页面。当应用程序首次打开时,所有页面都会被实例化并立即开始加载数据以显示。每个页面(这些是片段)都创建了一个AsyncTask来查询数据库并使用适当的数据填充自身。问题在于:尽管工作是在不同的线程上完成的,但UI在数据库查询期间停止更新(这些查询是按顺序进行的,总共需要1-3秒)。这在我的Nexus 5和旧Samsung手机上都发生过,所以我知道问题不是硬件无法跟上。
因此,我想知道为什么UI线程会被后台线程的工作阻塞。我对线程的理解是,在一个线程上做的工作不会长时间地阻塞另一个线程。如果我的理解是错误的,请解释一下。提前感谢您的帮助。
我认为这里不需要代码,但如果需要,请让我知道,我会发布相关部分。
get()
。我使用锁来控制对数据库的访问,但这些锁都是在doInBackground()
中获取和释放的。 - Nathan Walters