作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用下面的代码列出一个唯一给我发短信的人名单。它工作正常,但仍然有点慢,加载需要 4 到 5 秒,我的设备上有 650 条短信,有什么建议吗?
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listSMS();
}
private void listSMS()
{
TextView tview = (TextView) findViewById(R.id.list);
Uri uriSMSURI = Uri.parse("content://sms/inbox");
ContentResolver cr= this.getContentResolver();
Cursor cur = cr.query(uriSMSURI, null, null, null, null);
LinkedHashSet contactList= new LinkedHashSet();
String sms = "";
while (cur.moveToNext()) {
if(!contactList.contains(cur.getString(2)))
{
contactList.add(cur.getString(2));
sms += "From :" + getContactName(cur.getString(2),cr)+"\n";
}
}
cur.close();
tview.append(sms);
}
public static String getContactName(String num, ContentResolver cr) {
Uri u = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,Uri.encode(num));
String[] projection = new String[] { ContactsContract.Contacts.DISPLAY_NAME};
Cursor c = cr.query(u, projection, null, null, null);
try {
if (!c.moveToFirst())
return num;
int index = c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
return c.getString(index);
} finally {
if (c != null)
c.close();
}
}
最佳答案
与其预先准备联系人列表及其名称,然后将其传递给适配器,不如尝试仅使用 ID 准备列表,然后在适配器中获取相应的名称。这将解决启动延迟问题,但会使 ListView
的滚动速度变慢,这可以通过使用 View Holder 来解决。或某些缓存机制以防止多次获取相同的名称。另请注意,适配器将查询当前仅对用户可见的联系人姓名。
关于java - 在 android 中与发件人一起列出 SMS 时性能缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23312309/
我是一名优秀的程序员,十分优秀!