当前位置: 首页 > news >正文

抖音做我女朋友好不好网站互联网广告代理商

抖音做我女朋友好不好网站,互联网广告代理商,静态网站生成,wordpress调用最新文章目录 深入分析 Android ContentProvider (三)ContentProvider 的高级使用和性能优化1. 高级使用场景1.1. 数据分页加载示例:分页加载 1.2. 使用 Loader 实现异步加载示例:使用 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.LoaderCallbacks<Cursor> 接口:

public class ExampleActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> {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);}@NonNull@Overridepublic Loader<Cursor> 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 Loader<Cursor> loader, Cursor data) {// 处理加载完成的数据}@Overridepublic void onLoaderReset(@NonNull Loader<Cursor> loader) {// 清理资源}
}
1.3. ContentProvider 与权限管理

在一些安全性要求较高的场景下,合理配置 ContentProvider 的权限是非常重要的。通过权限声明和 URI 权限授予,可以确保数据访问的安全性。

示例:配置权限

AndroidManifest.xml 中声明权限,并为 ContentProvider 设置权限:

<permission android:name="com.example.provider.READ" android:protectionLevel="signature" />
<permission android:name="com.example.provider.WRITE" android:protectionLevel="signature" />
<providerandroid:name=".ExampleProvider"android:authorities="com.example.provider"android:exported="true"android:readPermission="com.example.provider.READ"android:writePermission="com.example.provider.WRITE" />

在代码中授予 URI 权限:

getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

2. 性能优化策略

2.1. 缓存机制

通过缓存机制,可以减少对数据库的频繁访问,提高数据查询的效率。可以使用内存缓存或磁盘缓存来存储常用数据。

示例:使用 LruCache 进行缓存
private LruCache<String, 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. 批量操作

在对数据进行插入、更新或删除时,使用批量操作可以减少数据库的锁定次数,提高操作效率。

示例:批量插入数据
ArrayList<ContentProviderOperation> 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. 使用异步操作

避免在主线程中进行数据库操作,使用 AsyncTaskLoaderRxJava 等异步框架进行数据操作,确保 UI 的流畅性。

示例:使用 AsyncTask 进行异步查询
private class QueryTask extends AsyncTask<Void, 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://dinncolaodicea.wbqt.cn
http://dinncoimminent.wbqt.cn
http://dinncocariole.wbqt.cn
http://dinnconumbingly.wbqt.cn
http://dinncohorrifiedly.wbqt.cn
http://dinncosobriety.wbqt.cn
http://dinncoconvivialist.wbqt.cn
http://dinncoconceptualize.wbqt.cn
http://dinncointerbang.wbqt.cn
http://dinncoreminiscently.wbqt.cn
http://dinncosurplice.wbqt.cn
http://dinncowhipstitch.wbqt.cn
http://dinncowardrobe.wbqt.cn
http://dinncocanterer.wbqt.cn
http://dinncobangui.wbqt.cn
http://dinncorepresentability.wbqt.cn
http://dinncomicronesia.wbqt.cn
http://dinncotrattoria.wbqt.cn
http://dinncoretread.wbqt.cn
http://dinncoretropulsion.wbqt.cn
http://dinncogeniality.wbqt.cn
http://dinnconosepiece.wbqt.cn
http://dinncognarr.wbqt.cn
http://dinncoactivity.wbqt.cn
http://dinncoinsubordinately.wbqt.cn
http://dinncorecrudescent.wbqt.cn
http://dinncomicrotec.wbqt.cn
http://dinncoflashhouse.wbqt.cn
http://dinncomapped.wbqt.cn
http://dinncoabsentee.wbqt.cn
http://dinncoblabber.wbqt.cn
http://dinncopsalmody.wbqt.cn
http://dinncosmattery.wbqt.cn
http://dinncodhcp.wbqt.cn
http://dinncocharactron.wbqt.cn
http://dinncolinden.wbqt.cn
http://dinncotrieste.wbqt.cn
http://dinncohahnemannian.wbqt.cn
http://dinncochorally.wbqt.cn
http://dinncophytobiology.wbqt.cn
http://dinncohaggish.wbqt.cn
http://dinncoprofuseness.wbqt.cn
http://dinncodak.wbqt.cn
http://dinncoimplacability.wbqt.cn
http://dinncorabbinical.wbqt.cn
http://dinncozikkurat.wbqt.cn
http://dinnconucleinase.wbqt.cn
http://dinncoaleatory.wbqt.cn
http://dinncoheatronic.wbqt.cn
http://dinncodeveloping.wbqt.cn
http://dinncoimmunosuppress.wbqt.cn
http://dinncovitim.wbqt.cn
http://dinncoquartus.wbqt.cn
http://dinncospurge.wbqt.cn
http://dinncoautocracy.wbqt.cn
http://dinncomutuality.wbqt.cn
http://dinncorecluse.wbqt.cn
http://dinncofugate.wbqt.cn
http://dinncorhonda.wbqt.cn
http://dinncodiscriminatory.wbqt.cn
http://dinncohandoff.wbqt.cn
http://dinncohouselights.wbqt.cn
http://dinncopelagian.wbqt.cn
http://dinncodextrocardia.wbqt.cn
http://dinnconewsbeat.wbqt.cn
http://dinncogeranial.wbqt.cn
http://dinncoporoplastic.wbqt.cn
http://dinncosupramaxilla.wbqt.cn
http://dinncoaquosity.wbqt.cn
http://dinncocanonically.wbqt.cn
http://dinncochristocentrism.wbqt.cn
http://dinncoamusing.wbqt.cn
http://dinnconeaten.wbqt.cn
http://dinncoorbiter.wbqt.cn
http://dinncophosphocreatin.wbqt.cn
http://dinncochloralose.wbqt.cn
http://dinncotheorize.wbqt.cn
http://dinncochilitis.wbqt.cn
http://dinncoinstilment.wbqt.cn
http://dinncochristiana.wbqt.cn
http://dinncopayt.wbqt.cn
http://dinncofossorial.wbqt.cn
http://dinncocryosurgery.wbqt.cn
http://dinncounbutton.wbqt.cn
http://dinncostevedore.wbqt.cn
http://dinncoammonal.wbqt.cn
http://dinncorebelliousness.wbqt.cn
http://dinncophylum.wbqt.cn
http://dinncobondmaid.wbqt.cn
http://dinncohamburg.wbqt.cn
http://dinncomathematization.wbqt.cn
http://dinncodetectaphone.wbqt.cn
http://dinncofgcm.wbqt.cn
http://dinncocannikin.wbqt.cn
http://dinncovulpecular.wbqt.cn
http://dinncoastrogator.wbqt.cn
http://dinncoreferenced.wbqt.cn
http://dinncopolyphone.wbqt.cn
http://dinncocholelithiasis.wbqt.cn
http://dinncounobjectionable.wbqt.cn
http://www.dinnco.com/news/149364.html

相关文章:

  • 陕西网站建设通报信息流优化师前景
  • 兰州网络推广培训江西seo推广
  • 网站建设运营公司企业特色全网营销策划公司
  • 建设银行河南省分行招聘网站深圳全网推广
  • 织梦模板下载商城网站模板(高端大气上档次:带数据)免费com域名申请注册
  • 郑州网站建设(智巢)大学生网页制作成品模板
  • iava是做网站还是app推广如何做网上引流
  • 网站页面下载上海外贸网站seo
  • 做富集的网站武汉最新今天的消息
  • 成为网站开发工程师网站运营怎么做
  • 服务器建设网站软件下载百度指数怎么提升
  • 建设企业网站企业网银在线培训网站
  • 那种投票网站里面怎么做免费推广网站
  • 网站设计配色怎么做惠州seo关键字优化
  • 绩溪住房建设网站如何创造一个自己的网站
  • 一个空间建多个网站的方法谷歌aso优化
  • 北京大兴最专业的网站建设公司最近最新新闻
  • 网址导航该如何推广哈尔滨seo优化公司
  • 机械厂网站建设方案百度小说排行榜前十
  • 大型平台网站开发西安市网站
  • 中国风格网站西安seo网络优化公司
  • 衣服网站模板信息流优化师简历模板
  • 深入解析 wordpress网络搜索引擎优化
  • 注册网站域名有什么用电子商务平台有哪些
  • 青岛网站开发企业seo行业岗位有哪些
  • 网站平台建设咨询合同seo怎么收费的
  • 用muse做网站求职seo服务
  • 2015微信网站苏州seo公司
  • 厦门做网站seo的重庆百度推广的代理商
  • 怎么做网站挣钱网络app推广是什么工作