0

我正在编写一个 android 应用程序,其中我有 1 个按钮和 1 个进度条作为 UI 元素。

这个应用程序的主要目的是当用户按下这个按钮时,它必须创建一个包含所有自定义格式的电话簿联系人的数据库,这意味着我正在阅读联系人数据库并根据我的要求进行操作。

所以我使用SQLiteOpenHelper进行数据库操作。我编写了一个方法downloadPhonebook()来执行所有必需的操作。我编写了应用程序,当用户按下按钮时,我使进度条可见并调用此方法。

在这种情况下,用户界面在单击按钮后挂起,并在 15 秒后显示带有强制关闭等待按钮的对话框。

为了避免这种情况,我尝试了以下机制。

-> 广播按钮点击消息并调用方法downloadPhonebook()。这里没有用,出现同样的问题。

-> 使用 Thread 和 AsyncTask 调用此方法,这里我遇到了 Runtime 异常,例如Couldn't create Handler inside a Thread, Looper.prepare not called。我尝试调用 Looper.prepare() 和 Looper.loop() 甚至发生异常。

-> 我尝试使用 Android 服务和广播意图,同样的问题 UI 再次挂起。

如果有人遇到这个问题或知道解决方案或知道如何使用 Looper.prepare 和 Looper.loop,请回复我。谢谢。

4

1 回答 1

0

工作流应该是这样的:在你的主类中创建一个处理程序,在你的 sql 助手类中添加一个处理程序,在你创建它时将主类的处理程序传递给 sql 助手类。在主类的单独线程上运行下载,下载准备好后,调用yourHandler.sendEmptyMessage(0). 您应该覆盖Handler.handleMessage主类中的(我不确定方法的确切名称)。您还可以发送消息以更新进度,阅读有关Andoid Handler的更多信息

于 2012-09-24T11:28:34.170 回答