2012-09-24 50 views
0

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

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

因此,我正在使用SQLiteOpenHelper进行数据库操作。我写了一个方法下载电话簿()执行所有必需的操作。我写了一个应用程序,当用户按下按钮时,我正在使进度条可见并调用此方法。

在这种情况下,UI点击按钮和显示用力关闭一个对话框等待按钮,15秒后后悬挂。

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

- >广播按钮点击消息,并且呼叫的方法downloadPhonebook()。这里没有用,发生同样的问题。

- >使用一个线程和AsyncTask来调用这个方法,在这里我得到了运行时异常,如无法在一个线程内创建Handler,Looper.prepare不叫。我试着调用Looper.prepare()和Looper.loop(),甚至发生异常。

- >我试图与Android服务和广播的意图,又同样的问题UI忌用。

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

+0

您可以发布您的代码? – Araw

回答

0

的工作流程应该是这样的:在主类中创建一个处理程序,在您的SQL助手类添加一个处理程序,在创建它的主类传递处理程序到SQL辅助类。在下载准备就绪后,从您的主课程的单独线程运行下载,请致电yourHandler.sendEmptyMessage(0)。你应该在主类中覆盖Handler.handleMessage(我不确定方法的确切名称)。您也可以发送邮件到更新进度,了解Andoid Handler了解更多信息

+0

我的应用程序的SQL部分没有错。它正在按需要做,即使我从接收器调用阻塞方法,问题也被UI挂起。 –

+0

我只是说从你的主类(它将等待消息)传递一个处理程序,并且调用从另一个线程发送消息。 – mihail

+0

我在一个服务中试过这个,在收件人收到按钮点击消息后,我将其发送给Handler,在那里我打电话给我的方法。在这里,我也遇到UI挂起问题。 –

相关问题