我知道一个 Activity 可以创建一个意图并将其发送到一个 IntentService。
我知道 IntentService 在完成请求后可以将消息发送回调用活动。
我知道从 IntentService 发送到调用 Activity 的 Message 可以包含一个 Bundle [setData(Bundle b);]
问题:从 IntentService 发送到调用 Activity 的消息是否可以包含任意大小的 Bundle/Cursor(比如说 169 条记录)?
我知道一个 Activity 可以创建一个意图并将其发送到一个 IntentService。
我知道 IntentService 在完成请求后可以将消息发送回调用活动。
我知道从 IntentService 发送到调用 Activity 的 Message 可以包含一个 Bundle [setData(Bundle b);]
问题:从 IntentService 发送到调用 Activity 的消息是否可以包含任意大小的 Bundle/Cursor(比如说 169 条记录)?
游标不可包裹......所以它可能不能作为捆绑包的一部分传递。
通常,该模式是让 IntentService 修改共享模型(可能是数据库甚至完整的内容提供者)中的记录,然后活动通过加载器观察该记录,该加载器设置为该模型中感兴趣的 Uris。
不,将 Loaders 与 Cursor 一起使用并不一定意味着您必须编写内容提供程序,但如果您这样做确实会有所帮助。
使用这篇文章,我能够找到一种将数据从另一个线程获取到我的 ListView 的方法。
现在我既可以从查询 SQLite 数据库加载我的视图,也可以从我的活动视图中获取用户输入,并使用相同的 IntentService 将数据插入 SQLite 数据库(SQLite 数据库中每个表一个 IntentService,不计算自定义触发器类 [所有活动关联同一张表使用同一个IntentService])!
当 IntentService 使用 Message 类响应调用 Activity 时,我使用包含从 SQLite db 查询返回的 Serializable 二维数组 [Bundle.putSerializable("Label", 2DArray )] 的 Bundle 填充 Message。
在 Activity 中,该数组被转换为包含具有两个字段的自定义类的数组,然后将其绑定到自定义 ArrayAdapter。
通知器不是必需的,因为每次调用 Activity.onResume() 时,视图都会重新加载最新数据。