Android如何在服务和活动之间传递数据?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (133)

我有一个应该始终运行的服务,并且在某些时候需要提醒用户任务要完成。当用户接受任务时,服务需要查看本地数据库,构建一些非原始对象,并将它们提供给它刚刚启动的活动。

我已经看了一遍,对于一个正确的方法感到非常困惑,所以我有几个问题来帮助我把头围绕在它周围。

  1. 如果一个活动创建了一个本地SQLite数据库,那么该应用程序的服务和活动以后可以访问同一个数据库?
  2. 服务和活动是否需要在相同或不同的包中?我想不会,但由于某种原因,我记得在其他地方看到了这方面的情况。
  3. 我将如何处理从服务到活动的数据传输?我在想一个内容提供商,但似乎应该有一种更简单的方式让服务交付数据。类似于意图,但对于非基元。

提问于
用户回答回答于
  1. 如果Service和Activity类在同一个包中,我相信他们应该能够访问相同的私有存储空间。
  2. 我会将它们放在同一个包中,因为它们是相同的整体应用程序结构的一部分。
  3. 将数据捆绑到Intent的额外项中作为键值对并开始活动。
Intent intent = new Intent(this, SecondActivity.class);
Bundle b = new Bundle();

// see Bundle.putInt, etc.
// Bundle.putSerializable for full Objects (careful there)
b.putXXXXX("key", ITEM);  
intent.putExtras(b);
startActivity(intent);

// -- later, in Activity
Bundle b = this.getIntent().getExtras();
int i = b.getInt("key");
用户回答回答于

从服务中,通知用户,使用NotificationManager。你可以将一个可序列化的对象从你的服务传递给intent,然后传递给开始的activity,但是我建议改为传递一个db ID。

我们已经构建了一个新的Android ORM工具,您可以使用它。它包括可用于构建应用程序的原型Activity和Service类。我还没有一个使用该服务的示例应用程序,但我将在下一个代码中进行编码并尽快完成。

看到这个方法:

http://ormlite.com/

和我的博客:

http://touchlabblog.tumblr.com/

扫码关注云+社区