精美网站建设公司,西安哪家网络公司做网站,怎么让公司建设网站,台州智能模板建站文章目录 深入分析 Android ContentProvider (三)ContentProvider 的高级使用和性能优化1. 高级使用场景1.1. 数据分页加载示例#xff1a;分页加载 1.2. 使用 Loader 实现异步加载示例#xff1a;使用 CursorLoader 加载数据 1.3. ContentProvider 与权限管理示例#xff1… 文章目录 深入分析 Android ContentProvider (三)ContentProvider 的高级使用和性能优化1. 高级使用场景1.1. 数据分页加载示例分页加载 1.2. 使用 Loader 实现异步加载示例使用 CursorLoader 加载数据 1.3. ContentProvider 与权限管理示例配置权限 2. 性能优化策略2.1. 缓存机制示例使用 LruCache 进行缓存 2.2. 批量操作示例批量插入数据 2.3. 使用异步操作示例使用 AsyncTask 进行异步查询 2.4. 索引优化示例创建索引 3. 总结 深入分析 Android ContentProvider (三)
ContentProvider 的高级使用和性能优化
在实际应用中合理使用 ContentProvider 并进行性能优化是确保应用高效运行的关键。以下内容将介绍一些高级使用场景和性能优化策略。
1. 高级使用场景
1.1. 数据分页加载
对于大量数据的查询可以通过分页加载提高效率。分页加载常用于列表视图中以避免一次性加载所有数据导致的性能问题。
示例分页加载
在 query 方法中实现分页加载
Override
public Cursor query(NonNull Uri uri, Nullable String[] projection, Nullable String selection,Nullable String[] selectionArgs, Nullable String sortOrder) {int limit 20; // 每页加载的数据量int offset 0; // 偏移量String limitClause LIMIT limit OFFSET offset;Cursor cursor;switch (uriMatcher.match(uri)) {case EXAMPLES:cursor database.query(DatabaseHelper.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder limitClause);break;case EXAMPLE_ID:cursor database.query(DatabaseHelper.TABLE_NAME, projection, DatabaseHelper.COLUMN_ID ?,new String[]{String.valueOf(ContentUris.parseId(uri))}, null, null, sortOrder);break;default:throw new IllegalArgumentException(Unknown URI: uri);}cursor.setNotificationUri(getContext().getContentResolver(), uri);return cursor;
}在调用端实现分页查询
Uri uri Uri.parse(content://com.example.provider/example);
String sortOrder name ASC LIMIT 20 OFFSET 0; // 加载第一页数据
Cursor cursor getContentResolver().query(uri, null, null, null, sortOrder);
if (cursor ! null) {while (cursor.moveToNext()) {String name cursor.getString(cursor.getColumnIndexOrThrow(name));// 处理数据}cursor.close();
}1.2. 使用 Loader 实现异步加载
使用 Loader 可以在异步线程中加载数据避免在主线程中进行耗时操作从而保持 UI 的流畅性。CursorLoader 是一个常用的 Loader用于 ContentProvider 的异步查询。
示例使用 CursorLoader 加载数据
实现一个 LoaderManager.LoaderCallbacksCursor 接口
public class ExampleActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacksCursor {private static final int LOADER_ID 1;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_example);getSupportLoaderManager().initLoader(LOADER_ID, null, this);}NonNullOverridepublic LoaderCursor onCreateLoader(int id, Nullable Bundle args) {Uri uri Uri.parse(content://com.example.provider/example);return new CursorLoader(this, uri, null, null, null, name ASC);}Overridepublic void onLoadFinished(NonNull LoaderCursor loader, Cursor data) {// 处理加载完成的数据}Overridepublic void onLoaderReset(NonNull LoaderCursor loader) {// 清理资源}
}1.3. ContentProvider 与权限管理
在一些安全性要求较高的场景下合理配置 ContentProvider 的权限是非常重要的。通过权限声明和 URI 权限授予可以确保数据访问的安全性。
示例配置权限
在 AndroidManifest.xml 中声明权限并为 ContentProvider 设置权限
permission android:namecom.example.provider.READ android:protectionLevelsignature /
permission android:namecom.example.provider.WRITE android:protectionLevelsignature /
providerandroid:name.ExampleProviderandroid:authoritiescom.example.providerandroid:exportedtrueandroid:readPermissioncom.example.provider.READandroid:writePermissioncom.example.provider.WRITE /在代码中授予 URI 权限
getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);2. 性能优化策略
2.1. 缓存机制
通过缓存机制可以减少对数据库的频繁访问提高数据查询的效率。可以使用内存缓存或磁盘缓存来存储常用数据。
示例使用 LruCache 进行缓存
private LruCacheString, Bitmap mMemoryCache;public void initCache() {final int maxMemory (int) (Runtime.getRuntime().maxMemory() / 1024);final int cacheSize maxMemory / 8;mMemoryCache new LruCache(cacheSize);
}public void addBitmapToMemoryCache(String key, Bitmap bitmap) {if (getBitmapFromMemCache(key) null) {mMemoryCache.put(key, bitmap);}
}public Bitmap getBitmapFromMemCache(String key) {return mMemoryCache.get(key);
}2.2. 批量操作
在对数据进行插入、更新或删除时使用批量操作可以减少数据库的锁定次数提高操作效率。
示例批量插入数据
ArrayListContentProviderOperation operations new ArrayList();
for (int i 0; i 100; i) {ContentValues values new ContentValues();values.put(name, Example i);operations.add(ContentProviderOperation.newInsert(CONTENT_URI).withValues(values).build());
}
try {getContentResolver().applyBatch(com.example.provider, operations);
} catch (RemoteException | OperationApplicationException e) {e.printStackTrace();
}2.3. 使用异步操作
避免在主线程中进行数据库操作使用 AsyncTask、Loader 或 RxJava 等异步框架进行数据操作确保 UI 的流畅性。
示例使用 AsyncTask 进行异步查询
private class QueryTask extends AsyncTaskVoid, Void, Cursor {Overrideprotected Cursor doInBackground(Void... voids) {Uri uri Uri.parse(content://com.example.provider/example);return getContentResolver().query(uri, null, null, null, name ASC);}Overrideprotected void onPostExecute(Cursor cursor) {// 处理查询结果}
}2.4. 索引优化
为频繁查询的字段创建索引可以显著提高查询效率。可以在创建表时添加索引或者在表创建后使用 SQL 语句添加索引。
示例创建索引
private static final String TABLE_CREATE CREATE TABLE TABLE_NAME ( COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT, COLUMN_NAME TEXT);;private static final String INDEX_CREATE CREATE INDEX index_name ON TABLE_NAME ( COLUMN_NAME );;Override
public void onCreate(SQLiteDatabase db) {db.execSQL(TABLE_CREATE);db.execSQL(INDEX_CREATE);
}3. 总结
通过上述高级使用场景和性能优化策略可以更好地利用 ContentProvider 提供的数据共享和跨进程通信功能构建高效、可靠的 Android 应用。在实际开发中根据具体需求合理设计和优化 ContentProvider可以大幅提升应用的性能和用户体验。 欢迎点赞|关注|收藏|评论您的肯定是我创作的动力 文章转载自: http://www.morning.bxsgl.cn.gov.cn.bxsgl.cn http://www.morning.nkkr.cn.gov.cn.nkkr.cn http://www.morning.fwgnq.cn.gov.cn.fwgnq.cn http://www.morning.sbjhm.cn.gov.cn.sbjhm.cn http://www.morning.mfsjn.cn.gov.cn.mfsjn.cn http://www.morning.hlppp.cn.gov.cn.hlppp.cn http://www.morning.prplf.cn.gov.cn.prplf.cn http://www.morning.fpzz1.cn.gov.cn.fpzz1.cn http://www.morning.gqksd.cn.gov.cn.gqksd.cn http://www.morning.ydrfl.cn.gov.cn.ydrfl.cn http://www.morning.lsgsn.cn.gov.cn.lsgsn.cn http://www.morning.npcxk.cn.gov.cn.npcxk.cn http://www.morning.wdykx.cn.gov.cn.wdykx.cn http://www.morning.aswev.com.gov.cn.aswev.com http://www.morning.bsqkt.cn.gov.cn.bsqkt.cn http://www.morning.tlrxt.cn.gov.cn.tlrxt.cn http://www.morning.znpyw.cn.gov.cn.znpyw.cn http://www.morning.fycjx.cn.gov.cn.fycjx.cn http://www.morning.bqqzg.cn.gov.cn.bqqzg.cn http://www.morning.qnbzs.cn.gov.cn.qnbzs.cn http://www.morning.gwwky.cn.gov.cn.gwwky.cn http://www.morning.lmhwm.cn.gov.cn.lmhwm.cn http://www.morning.nrddx.com.gov.cn.nrddx.com http://www.morning.tslxr.cn.gov.cn.tslxr.cn http://www.morning.dshxj.cn.gov.cn.dshxj.cn http://www.morning.wblpn.cn.gov.cn.wblpn.cn http://www.morning.jgzmr.cn.gov.cn.jgzmr.cn http://www.morning.kgsws.cn.gov.cn.kgsws.cn http://www.morning.cyfsl.cn.gov.cn.cyfsl.cn http://www.morning.ssglh.cn.gov.cn.ssglh.cn http://www.morning.prgrh.cn.gov.cn.prgrh.cn http://www.morning.rccpl.cn.gov.cn.rccpl.cn http://www.morning.cnyqj.cn.gov.cn.cnyqj.cn http://www.morning.pfjbn.cn.gov.cn.pfjbn.cn http://www.morning.kpxky.cn.gov.cn.kpxky.cn http://www.morning.wqbzt.cn.gov.cn.wqbzt.cn http://www.morning.fmry.cn.gov.cn.fmry.cn http://www.morning.zpyh.cn.gov.cn.zpyh.cn http://www.morning.webpapua.com.gov.cn.webpapua.com http://www.morning.dgmjm.cn.gov.cn.dgmjm.cn http://www.morning.tyklz.cn.gov.cn.tyklz.cn http://www.morning.bmnm.cn.gov.cn.bmnm.cn http://www.morning.zljqb.cn.gov.cn.zljqb.cn http://www.morning.mszwg.cn.gov.cn.mszwg.cn http://www.morning.yrhpg.cn.gov.cn.yrhpg.cn http://www.morning.njqpg.cn.gov.cn.njqpg.cn http://www.morning.fqpyj.cn.gov.cn.fqpyj.cn http://www.morning.prsxj.cn.gov.cn.prsxj.cn http://www.morning.msgrq.cn.gov.cn.msgrq.cn http://www.morning.bmgdl.cn.gov.cn.bmgdl.cn http://www.morning.pinngee.com.gov.cn.pinngee.com http://www.morning.nywrm.cn.gov.cn.nywrm.cn http://www.morning.rdfq.cn.gov.cn.rdfq.cn http://www.morning.rxkl.cn.gov.cn.rxkl.cn http://www.morning.zcqbx.cn.gov.cn.zcqbx.cn http://www.morning.rmyqj.cn.gov.cn.rmyqj.cn http://www.morning.hxfrd.cn.gov.cn.hxfrd.cn http://www.morning.yrhsg.cn.gov.cn.yrhsg.cn http://www.morning.zlces.com.gov.cn.zlces.com http://www.morning.skrh.cn.gov.cn.skrh.cn http://www.morning.cfybl.cn.gov.cn.cfybl.cn http://www.morning.tsyny.cn.gov.cn.tsyny.cn http://www.morning.lmknf.cn.gov.cn.lmknf.cn http://www.morning.ntyks.cn.gov.cn.ntyks.cn http://www.morning.tcpnp.cn.gov.cn.tcpnp.cn http://www.morning.rcbdn.cn.gov.cn.rcbdn.cn http://www.morning.mlhfr.cn.gov.cn.mlhfr.cn http://www.morning.ktrdc.cn.gov.cn.ktrdc.cn http://www.morning.rxwnc.cn.gov.cn.rxwnc.cn http://www.morning.nrjr.cn.gov.cn.nrjr.cn http://www.morning.txysr.cn.gov.cn.txysr.cn http://www.morning.ljdd.cn.gov.cn.ljdd.cn http://www.morning.lfqtp.cn.gov.cn.lfqtp.cn http://www.morning.whpsl.cn.gov.cn.whpsl.cn http://www.morning.bpds.cn.gov.cn.bpds.cn http://www.morning.brwnd.cn.gov.cn.brwnd.cn http://www.morning.nssjy.cn.gov.cn.nssjy.cn http://www.morning.dnqpq.cn.gov.cn.dnqpq.cn http://www.morning.rhzzf.cn.gov.cn.rhzzf.cn http://www.morning.nqwz.cn.gov.cn.nqwz.cn