在Android3.0之前,很多应用程序响应性能方面有缺陷,其中比较典型的错误行为是在UI线程中执行了查询数据操作,尤其是一次性从database查出大量数据并加载到ListView里,用这种方式载入数据是最差的选择,硬件偏弱的手机会假死会儿。 其实体验最好的还属手机自带通讯录App这类应用,滑动丝般顺滑。
在Android 3.0版本之前一般的做法是用Activity提供的startManagingCursor()和stopManagingCursor(), 已经deprecated的API我们就不谈了,3.0之后取而代之的是Loader,想必Loader的使用大家都有所知道:public class CursorLoaderListFragment extends ListFragment {
SimpleCursorAdapter mAdapter;
SearchView mSearchView;
String mCurFilter; static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.CONTACT_STATUS,
}; private LoaderManager.LoaderCallbacks mLoaderCallback = new LoaderManager.LoaderCallbacks() { @Override
public Loader onCreateLoader(int id, Bundle args) { // This is called when a new Loader needs to be created.
String select = "((" + ContactsContract.Contacts.DISPLAY_NAME + " NOTNULL) AND ("
+ ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1) AND ("
+ ContactsContract.Contacts.DISPLAY_NAME + " != '' ))"; return new CursorLoader(getActivity(),
ContactsContract.Contacts.CONTENT_URI,
CONTACTS_SUMMARY_PROJECTION, select, null,
ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
} @Override
public void onLoadFinished(@NonNull Loader loader, Cursor data) { //