1

出于演示目的,我想构建相当大的 SQLite 产品表。我在主屏幕活动中有两个菜单项——一个用于清除表格,另一个用于填充演示项目。为了向客户展示设备的能力,我插入了 30 万条记录,这需要 3 分钟多一点。

数据在内容提供者内部生成,使用特殊的 URI 进行插入。调用时,以下代码在内容提供程序中处于活动状态。

public Uri insert(Uri uri, ContentValues values) {
    int uriType = sURIMatcher.match(uri);
    SQLiteDatabase sqlDB = databaseHelper.getWritableDatabase();
    String path;
    long id = 0;
    switch (uriType) {
        ...        
    case PRODUCTS_INSERT_DEMO_DATA:
        insertDemoProducts();
        ...
        break;
    }

insertDemoProduct()实施显示在单独的问题中。基本上,它在同一个线程中运行。因此,应用程序在上述 3 分钟内没有响应。我可以提前生成它,然后再展示给客户。无论如何,我想学习如何实现它,以便我能够看到进度并能够更早地停止它。

更新:我将实现从 Web 服务获取数据的机制。这样,我更喜欢对于该任务可能看起来过于复杂的解决方案(在循环中填充数据),但这将是未来功能的测试平台。

感谢您的任何提示。

4

1 回答 1

1

为了能够看到进度,您需要在单独的线程中运行您的函数,否则 UI 线程太忙而无法显示任何内容。您可以使用AsyncTask

要在需要时取消它,请使用 AsyncTask 的取消机制。基本上,您必须定期检查您是否应该停止工作,并在需要时退出您的任务。您需要的所有信息都在 AsyncTask 文档中。

于 2013-05-28T15:18:23.463 回答