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

时间:2010-09-19 20:57:08

标签: android service

所以我对如何做到这一切感到非常困惑,我希望有人可以为我分解一下。

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

我看了一遍,对于一个正确的方法感到非常困惑,所以我有几个问题可以帮助我绕过它。

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

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

  3. 如何从服务到活动进行数据传输?我在想一个内容提供商,但似乎应该有一种更简单的方法让服务只是交出数据。类似于Intent但非基元。

  4. 提前致谢。

2 个答案:

答案 0 :(得分:12)

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

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

  3. 将数据捆绑为Intent的额外值作为键值对并启动活动。


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

答案 1 :(得分:4)

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

从服务中,要通知用户,请使用NotificationManager。您可以将可序列化对象从服务传递到intent,然后传递给已启动的活动,但我建议传递db ID。

我们已经构建了一个新的Android ORM工具,您可以使用它。它包括可用于构建应用程序的原型Activity和Service类。我还没有使用该服务的示例应用程序,但我会对其进行编码,然后尽快启动它。

请参阅...

  

http://ormlite.com/

我的博客......

  

http://touchlabblog.tumblr.com/

我目前在我正在开发的应用程序中做了一些相当重的数据库内容。服务会检查服务器是否有更新,并且基本上会执行您要执行的操作。这一切都非常简单。