我正在尝试运行一个可以获取所有联系人信息的异步任务,但它没有运行并且在 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
最佳答案
这一行 暂停所有线程花费了一些时间
是正常的,因为它表明 GC 感觉要清理一些内存以将它分配到其他地方,它只是意味着它已经完成了它的工作或者在这里什么都不做,如果你的方法被调用,你可以使用调试检查或不,GC 删除异步线程,因为它感觉释放未使用的内存。
第二行表示它释放了一些内存作为收集时的 GC 的结果。
您应该首先检查您的方法,然后检查光标是否正在返回某个值,或者您的光标有问题。
希望这能解决您的问题。
关于java - AsyncTask 未运行,logcat 显示为暂停所有线程占用了 : time in ms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37694218/