Android:在服务和活动之间传递数据

所以我对如何做这件事感到非常困惑,我希望有人能够把它分解一点。

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

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

  1. 如果一个活动创build了一个本地的SQLite数据库,那么该应用程序的服务和活动可以访问同一个数据库吗?

  2. 服务和活动是否需要在相同或不同的包中? 我想不会,但由于某种原因,我记得在其他地方看到这个。

  3. 我怎么做从服务到活动的数据传输? 我正在考虑一个内容提供商,但似乎应该有一个更简单的方式,让服务只是交出数据。 类似于一个意图,但非基元。

提前致谢。

Solutions Collecting From Web of "Android:在服务和活动之间传递数据"

  1. 如果Service和Activity类在同一个包中,我相信他们应该能够访问相同的私有存储空间。

  2. 我会把它们放在同一个包中,因为它们是相同的整体应用程序结构的一部分。

  3. 将数据捆绑到一个Intent的extras中作为Key-value对,并开始活动。


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"); 

在同一个应用程序中,服务和活动可以访问相同的Sqlite数据库。 我build议使用一个SQLite数据库。 为了简单起见,请将您的服务连接设置为本地服务,因此您不需要AIDL接口和进程间通信。

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

我们已经构build了一个新的Android ORM工具,您可以使用它。 它包括可用于构build应用程序的原型“活动”和“服务”类。 我还没有一个使用该服务的示例应用程序,但是我将接下来编写该应用程序并尽快将其解压。

看到…

http://ormlite.com/

而我的博客…

http://touchlabblog.tumblr.com/

我目前在我正在工作的应用程序中做了一些非常沉重的数据库的东西。 服务检查服务器的更新,基本上做你想要做的。 它所有非常简单的东西。