gpt4 book ai didi

java - 在 android 中与发件人一起列出 SMS 时性能缓慢

转载 作者:行者123 更新时间:2023-11-30 02:55:39 24 4
gpt4 key购买 nike

我正在使用下面的代码列出一个唯一给我发短信的人名单。它工作正常,但仍然有点慢,加载需要 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com