Если вы не можете запустить GUI-приложение, такое как ProcessExplorer, и вы ищете аргументы «Командная строка» для процессов, вы можете использовать «wmic» через командную строку. Например:
wmic PROCESS get Processid,Caption,Commandline
Если вы хотите найти конкретный процесс, вы можете сделать это:
wmic PROCESS where "name like '%java%'" get Processid,Caption,Commandline
. Вывод этого будет показывать вам все аргументы командной строки процессов, таких как «java».
Хорошо, много вещей, чтобы упомянуть здесь ...
Для вашего первого кода, НИКОГДА НЕ ИСПОЛЬЗУЙТЕ API Contacts.People.XX
, если серьезно, для чего угодно, убедитесь, что вы ничего не импортируете из People
или не используете какой-либо из его API, это очень очень старый API, который был устарел много лет назад и даже не поддерживается некоторыми устройствами.
Относительно вашего второго кода, множества ошибок и проблем, которые я попытался исправить в своем коде ниже, но специально для вашего требования к производительности, обратите внимание, что вам не нужно applyBatch
для каждого контакта, если вы Создайте много контактов одновременно, можно поместить множество операций в ops
ArrayList
и применить их все за один раз - намного быстрее!
Примечания:
ACCOUNT_TYPE
/ ACCOUNT_NAME
чем-то связанным с вашим приложением. Я добавил к этому коду два постоянных значения MY_ACCOUNT_TYPE
/ MY_ACCOUNT_NAME
, которые вам нужно будет определить.
ArrayList<ContentProviderOperation> ops = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
createContact(ops, name, phone);
if (i % 100 == 0) { // experiment with different batch sizes to achieve best performance times
try {
contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException | OperationApplicationException e) {
Log.e(TAG, "error applying batch: ", e);
}
ops = new ArrayList<>();
}
}
private void createContact(ArrayList<ContentProviderOperation> ops, String name, String phone) {
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, MY_ACCOUNT_TYPE)
.withValue(RawContacts.ACCOUNT_NAME, MY_ACCOUNT_NAME).build());
int indexOfRawContactIdOperation = ops.size() - 1;
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, indexOfRawContactIdOperation)
.withValue(ContactsContract.Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.DISPLAY_NAME, name)
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, indexOfRawContactIdOperation)
.withValue(ContactsContract.Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
.withValue(Phone.NUMBER, number)
.withValue(Phone.TYPE, Phone.TYPE_MOBILE).build());
}