0

通話履歴に 100 件の通話があるとします。呼び出された一意の連絡先 (番号ではない) を見つけたい。問題は、連絡先に 2 つの電話番号がある場合 (たとえば、連絡先 A の場合、自宅の番号と携帯電話の番号がある場合)、その連絡先を 2 回カウントすることです。

以下を試しました。コールログを読んでいます。次に、通話ログの番号ごとに、次のカスタム関数を呼び出します。

private String getContactID (String number) 
{
    String contactID = "";
    ContentResolver context = getContentResolver();

    /// number is the phone number
    Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(number));

    String[] mPhoneNumberProjection = { PhoneLookup._ID };

    Cursor cur = context.query(lookupUri,mPhoneNumberProjection, null, null, null);
    try 
    {
       if (cur.moveToFirst()) 
       {
          contactID = cur.getString(0);
          return contactID;
       }
    } 
    finally 
    {
        if (cur != null)
            cur.close();
    }
    return contactID;
}

それで、連絡先IDと通話のタイムスタンプを含む通話ログがあり、セットを使用して一意のものを取得します...上記のコードは正常に機能しますが、パフォーマンスが非常に悪い場合は! 新しい Google Nexus 4 で試してみたところ、約 1600 ミリ秒かかりました。古いスマートフォンのことは考えたくない…

助言がありますか?

4

1 に答える 1

0

バックグラウンドスレッドを使用して、ListViewに情報を遅延ロードします。

最初は約10件の結果のみを取得し、リストに表示します。それは速く起こるはずです。その後、バックグラウンドスレッドで、一度に10個ずつ情報を取得し続け、それらをリストに追加し続けます。

于 2013-03-10T07:46:39.650 に答える