所以我对如何做到这一切感到非常困惑,我希望有人可以为我分解一下。
我有一个应该始终运行的服务,并且在某些时候它需要提醒用户任务要完成(可能通过通知栏图标)。当用户接受任务时,服务需要查看本地数据库,构造一些非原始对象,并将它们提供给刚刚启动的活动。
我看了一遍,对于一个正确的方法感到非常困惑,所以我有几个问题可以帮助我绕过它。
如果活动创建本地SQLite数据库,该应用程序的服务和活动可以在以后访问同一个数据库吗?
服务和活动是否需要在相同或单独的包中?我想不会,但由于某些原因,我记得在其他地方看到过这个。
如何从服务到活动进行数据传输?我在想一个内容提供商,但似乎应该有一种更简单的方法让服务只是交出数据。类似于Intent但非基元。
提前致谢。
答案 0 :(得分:12)
如果Service和Activity类在同一个包中,我相信他们应该可以访问相同的私有存储空间。
我会将它们放在同一个包中,因为它们是相同整体应用程序结构的一部分。
将数据捆绑为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");
答案 1 :(得分:4)
在同一个应用程序中,服务和活动可以访问相同的Sqlite数据库。我建议使用sqlite db。为简单起见,将服务连接设置为本地,因此您不需要AIDL接口和进程间通信。
从服务中,要通知用户,请使用NotificationManager。您可以将可序列化对象从服务传递到intent,然后传递给已启动的活动,但我建议传递db ID。
我们已经构建了一个新的Android ORM工具,您可以使用它。它包括可用于构建应用程序的原型Activity和Service类。我还没有使用该服务的示例应用程序,但我会对其进行编码,然后尽快启动它。
请参阅...
我的博客......
我目前在我正在开发的应用程序中做了一些相当重的数据库内容。服务会检查服务器是否有更新,并且基本上会执行您要执行的操作。这一切都非常简单。