UI要素として1つのボタンと1つの進行状況バーを持つAndroidアプリを作成しています。
このアプリの主な目的は、ユーザーがこのボタンを押したときに、すべての電話帳の連絡先をカスタマイズされた形式で含むデータベースを作成する必要があることです。つまり、連絡先データベースを読み取り、要件に合わせて操作しています。
そのため、データベース操作にSQLiteOpenHelperを使用しています。必要なすべての操作を実行するメソッドdownloadPhonebook()を作成しました。ユーザーがボタンを押すと、プログレスバーが表示され、このメソッドが呼び出されるようにアプリを作成しました。
この場合、UI は、ボタンをクリックし、[強制終了] ボタンと[待機] ボタンを含むダイアログを表示した後、15 秒後にハングしました。
これを回避するために、次のメカニズムを試しました。
-> ブロードキャスト ボタンのクリック メッセージとメソッド downloadPhonebook() を呼び出します。ここでは役に立ちません、同じ問題が発生しました。
-> Thread と AsyncTask を使用してこのメソッドを呼び出しました。ここで、Couldn't create Handler inside a Thread, Looper.prepare not called のようなランタイム例外が発生しました。例外が発生しても Looper.prepare() と Looper.loop() を呼び出してみました。
-> Android Service と Broadcast インテントで試しましたが、同じ問題の UI がハングしました。
誰かがこの問題に直面した場合、解決策を知っている場合、または Looper.prepare と Looper.loop の使い方を知っている場合は、私に返信してください。ありがとう。