2012-01-30 94 views
0

有没有可能让一个线程只用于在方法运行时显示progressdialog,而不会将操作本身放入线程中,就像在中那样完成AsyncTask数据库被阻塞和AsyncTask

假设方法的第一行是像startThread喜欢的东西ProgDialog.show(),最后一行是一样的东西stopThread喜欢的东西ProgDialog.dismiss()

我问其中的原因是,我试过的AsyncTask,和它的工作很好,直到该数据库的方法是什么我里面所谓的AsyncTask试图做数据库操作,而在主UI其他数据库操作还没有完成(或试图开始)。

所以我得到了一个数据库被阻塞的异常。我经常使用sqlite中的事务处理一致性和性能,这在这种情况下也是必需的。

+0

http://www.vogella.de/articles/AndroidPerformance/article.html这里。你应该同步你的方法。架构可能有问题。锁是正常的,死锁是不正常的。 – 2012-01-30 22:29:05

+0

最好的方法是让一个数据库管理器类在单个线程上执行所有数据库操作(或至少管理多个线程同步)......您可以使用处理程序执行其中的所有数据库操作...以及代码也是安全的,因为没有办法在将来的代码中创建死锁... – 2012-01-30 23:19:25

回答

1

是否有可能使一个线程仅用于在方法运行时显示progressdialog,而不会将操作本身放入线程中,就像在AsyncTask中完成的那样?假设第一行的方法类似于像ProgDialog.show()这样的startThread,最后一行类似于类似ProgDialog.dismiss()的stopThread。

不,因为唯一可以显示和关闭对话框的线程是主应用程序线程,并且您明确不想阻止该线程。

它运行良好,直到数据库方法我在内部调用AsyncTask尝试执行数据库操作,而主UI中的其他数据库操作尚未完成(或试图启动)。

将“其他数据库操作”移出主应用程序线程。

+0

谢谢,这有帮助。我将所有后续的DB方法放在AsyncTask中。 – user1179014 2012-01-31 20:06:47