私はアプリ開発の経験はあまりありませんが、すべての電話帳データを読み取って xml ファイルに保存するアプリを作成する必要があります。
私の現在のバージョンは私の電話で実行されています (連絡先は 150 件のみ)。しかし、数千の連絡先を持つデバイスで実行すると、アプリが非常に遅くなります。ボタンをクリックすると、新しい画面が表示されるまでに 1 分近くかかります。
私のアプリの構造はあまり良くないと思います。それが私が現在すべてのデータを読んでいる方法です:
private void xmlPart2(XmlSerializer シリアライザー) {
try {
ContentResolver contentr = getContentResolver();
Cursor cursor = contentr.query(
ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String id = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID));
serializer.startTag(null, "Contact");
serializer.attribute(null, "ID", id);
Cursor emailCur = contentr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID
+ " = ?", new String[] { id }, null);
serializer.startTag(null, "Emails");
while (emailCur.moveToNext()) {
String email = emailCur
.getString(emailCur
.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
String emailtype = emailCur
.getString(emailCur
.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
this.appendNode(serializer, "Email", email, emailtype);
}
serializer.endTag(null, "Emails");
emailCur.close();
if (Integer
.parseInt(cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = contentr
.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = ?", new String[] { id },
null);
serializer.startTag(null, "Numbers");
while (pCur.moveToNext()) {
String phonenumber = pCur
.getString(pCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String phonetype = pCur
.getString(pCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
this.appendNode(serializer, "Number", phonenumber,
phonetype);
}
serializer.endTag(null, "Numbers");
pCur.close();
}
serializer.endTag(null, "Contact");
}
}
cursor.close();
} catch (IOException e) {
e.printStackTrace();
}
}
これはコードのほんの一部です。現在のコードでは、次のフィールドを読み取ります: 名前、住所、電子メール、組織、メモ、インスタント メッセンジャー、ウェブサイト、ニックネーム、電話番号。
それを最適化する方法はありますか?API レベル 11 未満でも動作するはずなので、CursorLoader を使用できません。
私はすべての提案に感謝しています。