我正在编写一个Android应用,其中我有1个按钮和1个进度条作为UI元素。
此应用程序的主要目的是当用户按下此按钮时,它必须创建一个包含自定义格式的所有电话簿联系人的数据库,这意味着我正在阅读联系人数据库并操纵我的要求。
所以我使用 SQLiteOpenHelper 进行数据库操作。我写了一个方法 downloadPhonebook()来执行所有必需的操作。我写了app,当用户按下按钮时,我正在显示进度条并调用此方法。
在这种情况下,在点击按钮并在15秒后显示带有强制关闭和等待按钮的对话框后,用户界面被挂起。
为避免这种情况,我尝试了以下机制。
- >广播按钮单击消息和调用方法downloadPhonebook()。这里没用,出现同样的问题。
- >使用Thread和AsyncTask来调用此方法,这里我得到了运行时异常,例如无法在线程内创建处理程序,Looper.prepare未调用。我尝试调用Looper.prepare()和Looper.loop()甚至发生异常。
- >我尝试了Android服务和广播意图,同样问题UI被绞死。
如果有人遇到此问题或知道解决方案或知道如何使用Looper.prepare和Looper.loop请回复我。感谢。
答案 0 :(得分:0)
工作流应该是这样的:在主类中创建一个处理程序,在sql helper类中添加一个处理程序,在创建它时将处理程序从主类传递给sql helper类。在主要类的单独线程上运行下载,下载完成后,请致电yourHandler.sendEmptyMessage(0)
。您应该覆盖主类中的Handler.handleMessage
(我不确定方法的确切名称)。您还可以发送消息以更新进度,有关详细信息,请参阅Andoid Handler