草庐IT

安卓 : Do Application Login in background on boot-up

coder 2023-12-12 原文

我有一个 VOIP 应用程序,我需要在设备启动时在后台登录该应用程序。

目前我的应用程序的初始化是在 UI Active(onCreate()) 上完成的。

我脑子里有以下事情,谁能帮我解开疑惑。

  1. 服务设计必须要完成这个任务??
  2. 哪个远程服务 (AIDL) 或本地服务?为什么?
  3. UIService 交互是如何发生的?
  4. UI 激活后,谁得到回调? UI 还是 Service
  5. 我是否应该将 Service 作为我的 Controller,即 ServiceUI 数据传递反之亦然?

示例应用:Skype。

最佳答案

所以有很多方法可以实现你想要的,关键是什么更适合你的风格和设计。希望您会发现这些信息有用。

  1. 对于启动时在后台登录的应用程序,有几个选项。您首先需要的是 BroadcastReceiver,它在 list 中被定义为接收器。让 BroadcastReceiver 捕捉 ACTION_BOOT_COMPLETED Intent 。从这里您可以启动您的服务。这导致 #2。

  2. 如果您所做的只是 RESTful 调用,那么 IntentService 确实是理想的选择。 IntentService之间的区别和一个 Service很简单:一个 IntentService 从主线程运行,执行它的“代码”然后死掉。然而,一个服务在主线程上运行(这是一个重要的事实)并且运行时间很长,所以必须告诉它 stopSelf() .更进一步,与 Activity 相比,服务也不太可能被杀死(应用程序组件被杀死以便为新启动的应用程序腾出内存空间),即。它需要更高的优先级。该服务也可以声明为 foreground需要通知但给予更高优先级的服务。我认为在您的情况下,服务将是完美的。

  3. 一旦您的 UI( Activity )打开,连接到服务的最佳方式是 Binder .如果需要,这将允许从不同的应用程序/组件到服务的多个接口(interface)。 AIDL 是非常酷的东西,但根据我的经验,管理起来要困难得多,因为所有参数都必须是原始参数或 Parcables。 AIDL 也较慢且效率较低,因为它实际上是一种 IPC 形式。当服务以 Intent 启动时,将调用 onStartCommand() 方法。如果服务由尝试绑定(bind)到它的应用程序启动,则调用 onBind() 方法。但是您可以使用 Intent 启动服务,然后绑定(bind)到它。如果您更喜欢只需要快速调用数据的 RESTful 方法,您可以使用带有 ResultReceiver 的 IntentService。 . This is a great article如果您对 IntentService 和 ResultReceiver 感兴趣,则写了关于 Google I/O 示例的文章,并且总体上实现得很好。

  4. 这取决于你。使用 Binder 或 AIDL,您的 Activity 可以调用服务方法,就像调用对象方法一样,其中“回调”只是方法返回。如果您使用 ResultReceiver,则与 Receiver 接口(interface)的 Activity 将是回调。您也可以来回传递 Intents,但这可能会变得困惑。对于您的情况,Binder 方法和 Receiver 一样好。

  5. 将服务视为 MVVM 系统中的模型 - 将其用作从中获取数据的助手,而不是控制应用程序逻辑的东西。

抱歉,如果这看起来很困惑,有很多方法可以实现您正在寻找的东西。这只是什么最适合您的情况,您“感觉”更好的问题。更不用说 Android SDK 相当大了。我试图捕获所有可以帮助你的主题。祝你好运!

关于安卓 : Do Application Login in background on boot-up,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10331388/

有关安卓 : Do Application Login in background on boot-up的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby-on-rails - 每当 gem : I set :output but the logfile doesn't show up where I'd expect it to - 2

    在我的schedule.rb文件中,我有以下几行:set:output,'/log/cron_log.log'every5.minutesdocommand'echo"hello"'end我按照这个问题Rails,usingwhenevergemindevelopment中的建议运行了whenever-w,并且我假设cronfile已编写并正在运行。(我也尝试重新启动Rails服务器。)当我运行$crontab-l时,我看到以下内容:0,5,10,15,20,25,30,35,40,45,50,55****/bin/bash-l-c'echo"hello">>/log/cron_log

  3. ruby-on-rails - Rails 设计 : "You need to sign in or sign up before continuing" instead of "You will receive an email with instructions.." - 2

    我已经安装了DeviseonRails4.2.0,一切似乎都在工作,我使用了以下指南:http://sourcey.com/rails-4-omniauth-using-devise-with-twitter-facebook-and-linkedin/我的设计模块是:devise:database_authenticatable,:registerable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:omniauthable唯一的问题是,如果我尝试通过转到注册页面创建一个新帐户,然后在输入我的电子邮

  4. ruby-on-rails - Rails add_index 算法 : :concurrently still causes database lock up during migration - 2

    为了防止在迁移到生产站点期间出现数据库事务错误,我们遵循了https://github.com/LendingHome/zero_downtime_migrations中列出的建议。(具体由https://robots.thoughtbot.com/how-to-create-postgres-indexes-concurrently-in概述),但在特别大的表上创建索引期间,即使是索引创建的“并发”方法也会锁定表并导致该表上的任何ActiveRecord创建或更新导致各自的事务失败有PG::InFailedSqlTransaction异常。下面是我们运行Rails4.2(使用Acti

  5. ruby - 如何将 Ruby 哈希 "up"中的属性移动一级 - 2

    x={:name=>"John",:data=>{:physical=>{:age=>25,:weight=>150}}}我希望将数据的子属性向上移动一个级别(但不一定只是简单地展平所有属性)。在这种情况下,我基本上想将:physical属性“向上”移动一个级别。我正在尝试这个y=x[:data']y.each{|key|x[key]=y[key]}但是我得到...x=x.except(:data)=>{:name=>"John",[:physical,{:age=>25,:weight=>150}]=>nil}我在找...=>{:name=>"John",:physical=>{:a

  6. ruby-on-rails - Rails4 : Why resque worker is not picking up jobs - 2

    我在我的Rails4应用程序中使用resque和resque_scheduler。我的应用程序正在为resque提供一些工作,但工作人员没有在处理这些工作。reque-web显示没有失败。我已经通过运行开始resqueworkerQUEUE=kqueuerakeenvironmentresque:work我的rails控制台2.0.0p353:006>Resque.info=>{:pending=>0,:processed=>0,:queues=>0,:workers=>1,:working=>0,:failed=>0,:servers=>["redis://localhost:637

  7. ruby - DRY up Ruby 三元 - 2

    我经常有这样一种情况,我想做一些条件逻辑,然后返回一部分条件。如何在不重复true或false表达式中的条件部分的情况下执行此操作?例如:ClassName.method.blank??false:ClassName.method有没有办法避免重复ClassName.method?这是一个真实世界的例子:PROFESSIONAL_ROLES.key(self.professional_role).nil??948460516:PROFESSIONAL_ROLES.key(self.professional_role) 最佳答案 假设

  8. ruby - 首先 vagrant up 有效,但在停止/启动后出现 ruby​​ 错误 - 2

    我已经安装了ruby2.1.6,vagrant1.7.2abdvirtualbox4.3.28。第一个vagrantup工作正常,盒子被下载,服务器工作,但是当我运行halt然后尝试另一个vagrantup我得到下面的ruby​​错误信息C:/Users/Mike/.vagrant.d/gems/gems/childprocess-0.5.6/lib/childprocess/windows/lib.rb:308:[BUG]Segmentationfaultruby2.0.0p353(2013-11-22)[i386-mingw32]//lotsofoutputlistingrubyf

  9. ruby-on-rails - rails : Where does new_*something*_path variable get set up? - 2

    我为“消息”创建了一个脚手架,并且new_message_path和edit_message_path(用于link_to's)都已设置,但现在我已经创建了app/views/messages/sent.html.erb,我想做类似的内容,但我不知道该怎么做。我明白了undefinedlocalvariableormethod`sent_message_path'for# 最佳答案 这些方法是在定义路由时自动创建的,对于RESTful路由,它们遵循可预测的约定。运行“rakeroutes”是查看生成的所有路由的有用方法。我建议您阅读

  10. (一)专题介绍:移动端安卓手机改造成linux服务器&linux服务器中安装软件、部署前后端分离项目实战 - 2

    快捷目录前言一、涉及到的相关技术简介二、具体实现过程及踩坑杂谈1.安卓手机改造成linux系统实现方案2.改造后的手机Linux中软件的安装3.手机Linux中安装MySQL5.7踩坑实录4.手机Linux中安装软件的正确方法三、Linux服务器部署前后端分离项目流程1.前提准备(安装必要软件,搭建环境):2.前后端分离项目的详细部署过程:总结前言总体概述:本篇文章隶属于“手机改造服务器部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目

随机推荐