我有一个VOIP
应用程序,我需要在设备启动时在后台登录应用程序。
目前我的应用程序的初始化已完成UI
Active(onCreate()
).
我心里有以下几点,谁能帮我解答一下我的疑惑。
- 服务设计是必须完成这个任务吗?
- Which
Service Remote(AIDL)
或本地服务,为什么?
- 如何
UI
and Service
交互发生?
- After
UI
处于活动状态谁会收到回电?UI
or Service
?
- 我应该做吗
Service
as my Controller
i.e Service
to UI
数据通行证反之亦然?
示例应用程序:Skype。
所以有很多方法可以实现你想要的,关键是哪种更适合你的风格和设计。希望您会发现此信息有用。
对于在启动时在后台登录的应用程序,有几个选项。您需要的第一件事是 BroadcastReceiver,它在清单中定义为接收器。让广播接收器捕获ACTION_BOOT_COMPLETED http://developer.android.com/reference/android/content/Intent.html#ACTION_BOOT_COMPLETED意图。从这里您可以启动您的服务。这导致了#2。
如果您所做的只是 RESTful 调用,那么 IntentService 确实是理想的选择。之间的区别意向服务 http://developer.android.com/reference/android/app/IntentService.html and a Service http://developer.android.com/reference/android/app/Service.html很简单:IntentService 从主线程运行,执行它的“代码”并终止。然而,服务在主线程上运行(这是一个重要的事实)并且运行时间较长,因此必须告诉它停止自我() http://developer.android.com/reference/android/app/Service.html#stopSelf%28%29。更进一步来说,与 Activity 相比,Service 被终止的可能性也更小(应用程序组件被终止,以便为新启动的应用程序腾出内存空间),即。它具有更高的优先级。该服务也可以声明为前景 http://developer.android.com/reference/android/app/Service.html#startForeground%28int,%20android.app.Notification%29需要通知但给予更高优先级的服务。我认为在你的情况下,服务将是完美的。
一旦您的 UI(活动)打开,连接到服务的最佳方式将是Binder http://developer.android.com/reference/android/app/Service.html#onBind%28android.content.Intent%29。如果需要,这将允许从不同的应用程序/组件到服务的多个接口。 AIDL 是非常酷的东西,但根据我的经验,管理起来要困难得多,因为所有参数都必须是原始参数或 Parcables。 AIDL 也较慢且效率较低,因为它实际上是 IPC 的一种形式。当有意图启动服务时,将调用 onStartCommand() 方法。如果服务是由尝试绑定到它的应用程序启动的,则调用 onBind() 方法。但是您可以使用 Intent 启动 Service,然后绑定到它。如果您更喜欢 RESTful 方法,只需快速调用数据,您可以将 IntentService 与结果接收者 http://developer.android.com/reference/android/os/ResultReceiver.html. 这是一篇很棒的文章 http://neilgoodman.net/2012/01/01/modern-techniques-for-implementing-rest-clients-on-android-4-0-and-below-part-2/写了关于 Google I/O 示例的文章,如果您对 IntentService 和 ResultReceiver 感兴趣,那么总体来说实现得很好。
这取决于你。使用 Binder 或 AIDL,您的 Activity 可以像对象方法一样调用 Service 方法,其中“回调”只是方法返回。如果您使用 ResultReceiver,则与接收器接口的活动将是回调。您也可以只来回传递意图,但这可能会变得混乱。同样,对于您的情况,活页夹方法和接收器都很好。
将服务视为 MVVM 系统中的模型 - 将其用作从中获取数据的助手,而不是控制应用程序逻辑的东西。
抱歉,如果这看起来很混乱,有很多方法可以实现您想要的目标。这只是什么最适合您的情况的问题,您“感觉”更好。更不用说 Android SDK 相当庞大了。我试图讨论所有可以帮助你的话题。祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)