我正在尝试运行asynctask,它可以获取所有联系人信息,但它没有运行并显示为“暂停所有线程花费:时间以毫秒为单位”logcat
SyncContacts obSync = new SyncContacts(this);
new AsyncTask<Void, Void, HashMap<String,String>>() {
@Override
protected void onPreExecute() {
}
@Override
protected HashMap<String,String> doInBackground(Void... params) {
HashMap<String,String> pairs = new HashMap<String, String>();
try {
System.out.println("succcccccccccccccccccces");
pairs = obSync.getContacts();
} catch (JSONException e) {
System.out.println("Errrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr");
e.printStackTrace();
}
return pairs;
}
@Override
protected void onPostExecute(HashMap<String,String> result) {
}
}.execute();
这是SyncContacts类
中的方法public HashMap<String,String> getContacts() {
HashMap<String,String> num_name_pairs = new HashMap<>();
ArrayList<String> numbers = new ArrayList<>();
ContentResolver cr = c.getContentResolver();
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cursor.moveToFirst()) {
do {
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null);
while (pCur.moveToNext()) {
String contactNumber = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)).trim().replace(" ","");
String name = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
if (!numbers.contains(contactNumber)) {
numbers.add(contactNumber);
num_name_pairs.put(contactNumber,name);
}
System.out.print("++++" + contactNumber + "->" + name + "...Success");
}
pCur.close();
}
} while (cursor.moveToNext());
cursor.close();
}
return num_name_pairs;
}
日志猫显示为
06-08 11:09:57.996 21330-21345/com.example.venky.snapbin W/art: Suspending all threads took: 11.281ms
06-08 11:09:58.015 21330-23820/com.example.venky.snapbin I/art: Explicit concurrent mark sweep GC freed 22422(882KB) AllocSpace objects, 2(38MB) LOS objects, 6% free, 54MB/58MB, paused 1.882ms total 49.168ms
答案 0 :(得分:1)
这一行 暂停所有线程花了一些时间
是正常的,因为它表明GC感觉要清理一些内存以将其分配到其他地方,它只是意味着它已经完成了它的工作或者没有任何事情要做,你可以使用debug检查你的方法是否被调用或不,GC删除异步线程,因为它释放未使用的内存。
第二行意味着它在收集GC时释放了一些内存。
您应首先检查您的方法,然后光标返回某个值,或者光标有例。
希望这能解决您的问题。