gpt4 book ai didi

android - 如何在android后台运行一段代码?

转载 作者:行者123 更新时间:2023-11-30 00:27:01 24 4
gpt4 key购买 nike

我正在尝试制作一个从手机加载联系人列表的应用程序,但是根据联系人的数量,这会花费很多时间。我想在后台运行加载联系人列表,这样它就不会减慢应用程序的速度。我正在使用以下函数加载联系信息。

void loadContacts() {
ContentResolver contentResolver=getContentResolver();
Cursor cursor=contentResolver.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null);
if(cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Bitmap photo = retrieveContactPhoto(id);
int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
String phoneNumber = null;
if (hasPhoneNumber > 0) {
Cursor cursor2 = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null);
while (cursor2.moveToNext()) {
String ph = cursor2.getString(cursor2.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
phoneNumber = ph.replaceAll("\\s", "");
System.out.println(phoneNumber);
}
cursor2.close();
}
if(phoneNumber==null)
continue;
}
}
cursor.close();
}

最佳答案

您需要使用 Loader 来解决您的查询。使用 Loader 会给你带来一些好处。其中之一是:如果用户旋转他们的手机并且 Activity 重新启动,加载程序将被保留(不再需要查询数据库,因为对光标的引用在加载程序中仍然可用),即加载程序是生命周期的意识到的。你需要实现

 LoaderManager.LoaderCallbacks<Cursor>

像这样

 MyActivity extends AppCompatActivity implements 
LoaderManager.LoaderCallbacks<Cursor>{

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
//return a new instance of CursorLoader

return new CursorLoader(this) {
//this reference will be preserved when activity rotates
Cursor myCursor;


@Override
protected void onStartLoading() {
super.onStartLoading();

//myCursor will be null when activity is starting for the first time
if (myCursor== null)
forceLoad();
else
deliverResult(myCursor);
}

@Override
public Cursor loadInBackground() {
//make your database query here

myCursor = getContext().getContentResolver().query()
return myCursor;

}

}


}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {

//bind your Cursor to your activity view

}


@Override
public void onLoaderReset(Loader<Cursor> loader) {

}


}

有关更多信息,请查看我的 Udacity Nanodegree 代码 here第 272 - 338 行解释得更好。

关于android - 如何在android后台运行一段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45159764/

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