我对应用程序开发不是很有经验,但我必须编写一个应用程序来读取所有电话簿数据并将其保存到 xml 文件中。
我当前的版本正在我的手机上运行(只有 150 个联系人)。但是当我在有几千个联系人的设备上运行它时,应用程序变得非常慢。当我单击一个按钮时,需要将近一分钟才能显示新屏幕。
我想我的应用程序的结构不是很好。这就是我目前读取所有数据的方式:
私人无效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。
我感谢每一个建议。