我有一个应用程序,通过使用locationlistener创建面包屑来跟踪手机的位置。用户可以启动应用程序,然后启动痕迹跟踪记录。该路径显示在应用程序中的谷歌地图上作为旅行记录。面包屑也被发送到一个clout数据库,其他应用程序可以访问正在进行的旅行。
用户可以结束应用,但选择保持面包屑记录,以便其他应用仍然可以实时跟踪。如果用户永远不回来停止录制,录制将从开始播放24小时后停止。但是,用户可以随时启动应用程序并停止记录跟踪。
我的应用程序似乎应该包含活动所绑定的活动和服务。没有其他应用程序将使用此服务,因此似乎服务不应该是IPC服务。该服务执行所有位置监听和记录到云数据库。
我的问题是,在1226页的CommonsWare书中,它说如果我的应用程序调用unbindService(),android将关闭该服务。我希望它继续运行,直到活动关闭它或者它在24小时后自行关闭。
这是否意味着我的服务必须是IPC服务?
如何结束我的活动并让服务保持运行? 谢谢,加里
答案 0 :(得分:1)
首先,您希望将服务作为前台服务。
有些事情。 (我将在您的服务onCreate函数中调用此代码。)
Notification notification = new Notification(
R.drawable.ic_dialog_info,
getText(R.string.notification_text),
System.currentTimeMillis());
notification.flags |= Notification.FLAG_AUTO_CANCEL;
Intent activityIntent = new Intent(this, YourMainClass.class);
activityIntent.setAction(Intent.ACTION_MAIN);
activityIntent.addCategory(Intent.CATEGORY_LAUNCHER);
activityIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
activityIntent, 0);
notification.setLatestEventInfo(this,
getText(R.string.notification_title),
getText(R.string.notification_text), pendingIntent);
startForeground(123, notification);
另一件事是不要将您的服务绑定到您的活动。如果您的活动被杀,您不希望您的服务也死亡。如果你的设备内存不足,如果你的活动不在前台,那么它就是被杀的候选人。当然,当内存释放时,Android会尝试重新创建它。但是你的用户体验会很糟糕。如果您的服务没有绑定到您的活动并且是前台,那么它应该是在垃圾收集期间被操作系统杀死的最后一件事。
您可以使用这段简单的代码启动服务而不将其绑定到您的活动:此代码可以在您的活动onCreate中调用。
Intent service = new Intent(YourContext, YourService.class);
startService(service);
希望这会对你有所帮助! 干杯
答案 1 :(得分:0)
我的应用程序似乎应该包含活动所绑定的活动和服务。
不一定。您可以使用命令模式。
这是否意味着我的服务必须是IPC服务?
不一定。您可以使用命令模式。
如何结束我的活动并让服务继续运行?
使用startService()
启动服务。它是否会活24小时不在你的控制范围内(参见Dyarish的答案,它使它成为一个前台服务,这增加了它将存活的可能性很长)。