Android被LoaderManager卡住了

Android被LoaderManager卡住了,android,android-loadermanager,Android,Android Loadermanager,我有一个数据库和内容提供商的应用程序。为了在ListView中显示数据库中的一些数据,我使用LoaderManager。 它很简单,在大多数情况下都能很好地工作 但是,当来自内容提供商的许多更改通知到达时,UI完全过载。当光标所观察到的uri上有许多插入(大约每秒15次)时,就会发生这种情况。我认为,即使光标加载在后台,大量的bindView()调用也足以使UI过载 因此,在上述某些情况下,我希望将加载次数(以及onLoadFinished()调用)限制为每秒一次 有没有办法通过LoaderM

我有一个数据库和内容提供商的应用程序。为了在
ListView
中显示数据库中的一些数据,我使用
LoaderManager
。 它很简单,在大多数情况下都能很好地工作

但是,当来自内容提供商的许多更改通知到达时,UI完全过载。当光标所观察到的uri上有许多插入(大约每秒15次)时,就会发生这种情况。我认为,即使光标加载在后台,大量的
bindView()
调用也足以使UI过载

因此,在上述某些情况下,我希望将加载次数(以及
onLoadFinished()
调用)限制为每秒一次

  • 有没有办法通过
    LoaderManager
    实现这一点?我试着玩了
    starting()
    stopLoading
    ,但没有成功,而且无论如何都不推荐

  • 或者我必须自己管理一个
    加载程序
    ,但如果这种情况不常见,我会感到惊讶

谢谢你的建议

编辑


我实际上错过了一个方法
setUpdateThrottle(long delayMS)
完全按照我的要求执行。

您可以覆盖内容提供商中的applyBatch(…),并执行以下操作:

@Override
public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations)
        throws OperationApplicationException {
    final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    db.beginTransaction();
    try {
        final int numOperations = operations.size();
        final ContentProviderResult[] results = new ContentProviderResult[numOperations];
        for (int i = 0; i < numOperations; i++) {
            results[i] = operations.get(i).apply(this, results, i);
        }
        db.setTransactionSuccessful();
        return results;
    } finally {
        db.endTransaction();
    }
}
@覆盖
public ContentProviderResult[]applyBatch(ArrayList操作)
抛出操作应用程序异常{
final SQLiteDatabase db=mOpenHelper.getWritableDatabase();
db.beginTransaction();
试一试{
final int numperations=operations.size();
最终ContentProviderResult[]结果=新ContentProviderResult[numOperations];
对于(int i=0;i

您可以使用此选项将插入批处理到一个事务中,这样通知只发生一次。

感谢您的回复,即使它没有真正回答我的问题,也感谢您,我发现了
bulkInsert()
方法,该方法大大提高了性能。