草庐IT

android - 退出申请是否令人不悦?

coder 2023-05-06 原文

继续尝试学习 Android,我只是 read the following :

Question: Does the user have a choice to kill the application unless we put a menu option in to kill it? If no such option exists, how does the user terminate the application?

Answer: (Romain Guy): The user doesn't, the system handles this automatically. That's what the activity lifecycle (especially onPause/onStop/onDestroy) is for. No matter what you do, do not put a "quit" or "exit" application button. It is useless with Android's application model. This is also contrary to how core applications work.



呵呵,我在Android世界中每走一步都会遇到一些问题=(

显然,您无法退出 Android 中的应用程序(但 Android 系统可以在任何时候完全摧毁您的应用程序)。那是怎么回事?我开始认为编写一个功能为“普通应用程序”的应用程序是不可能的——用户可以在他/她决定退出时退出应用程序。这不是应该依赖操作系统来做的事情。

我尝试创建的应用程序不是 Android Market 的应用程序。它不是一般大众“广泛使用”的应用程序,它是一个将在非常狭窄的业务领域中使用的业务应用程序。

我实际上非常期待为 Android 平台开发,因为它解决了 Windows Mobile 和 .NET 中存在的许多问题。然而,上周对我来说有点令人失望......我希望我不必放弃Android,但现在看起来不太好=(

有没有办法让我真正退出应用程序?

最佳答案

这最终会解决您的问题,但我首先想解决您在对撰写本文时已经给出的各种答案的各种评论中提出的一些问题。我无意改变你的想法——相反,这些是为将来阅读这篇文章的其他人准备的。

The point is that I cannot allow for Android to determine when my app is going to be terminated. that must be the choice of the user.


数百万人对环境根据需要关闭应用程序的模型非常满意。这些用户根本不会考虑“终止”Android 应用程序,就像他们不会考虑“终止”网页或“终止”恒温器一样。
iPhone 用户的情况大致相同,因为按下 iPhone 按钮并不一定“感觉”该应用程序已终止,因为许多 iPhone 应用程序从用户离开的地方开始,即使该应用程序真的被关闭(因为 iPhone 只允许目前一次一个第三方应用程序)。

As I said above, there is a lot of things going on in my app (data being PUSHed to the device, lists with tasks that always should be there, etc.).


我不知道“总是应该在那里的任务列表”是什么意思,但“数据被推送到设备”是一个令人愉快的虚构,在任何情况下都不应该通过 Activity 来完成。使用计划任务(通过 AlarmManager )更新您的数据以获得最大的可靠性。

Our users log in and can't be doing that every time they get a phone call and Android decides to kill the app.


有许多 iPhone 和 Android 应用程序可以解决这个问题。通常,这是因为他们持有登录凭据,而不是每次都强制用户手动登录。

For example, we want to check updates when exiting the application


这在任何操作系统上都是错误的。众所周知,您的应用程序被“退出”的原因是操作系统正在关闭,然后您的更新过程将在中途失败。一般来说,这不是一件好事。在启动时检查更新或完全异步检查更新(例如,通过计划任务),永远不要退出。

Some comments suggest that hitting the back button does not kill the app at all (see link in my question above).


按 BACK 按钮不会“杀死应用程序”。当用户按下 BACK 按钮时,它会完成屏幕上的 Activity 。

It should only terminate when the users want to terminate it - never ever any other way. If you can't write apps that behave like that in Android, then I think that Android can't be used for writing real apps =(


那么 Web 应用程序也不能。或 WebOS ,如果我正确理解他们的模型(还没有机会玩一个)。在所有这些中,用户不会“终止”任何东西——他们只是离开。 iPhone 有点不同,因为它目前一次只允许运行一件事(有一些异常(exception)),因此离开的行为意味着应用程序的立即终止。

Is there a way for me to really quit the application?


正如其他人告诉您的那样,用户(通过 BACK)或您的代码(通过 finish())可以关闭您当前正在运行的 Activity 。对于正确编写的应用程序,用户通常不需要其他任何东西,就像他们需要“退出”选项来使用 Web 应用程序一样。

根据定义,没有两个应用程序环境是相同的。这意味着您可以在新环境出现和其他环境被掩埋时看到环境中的趋势。
例如,越来越多的运动试图消除"file"的概念。大多数 Web 应用程序不会强制用户考虑文件。 iPhone 应用程序通常不会强制用户考虑文件。 Android 应用程序通常不会强制用户考虑文件。等等。
同样,越来越多的运动试图消除“终止”应用程序的概念。大多数 Web 应用程序不会强制用户注销,而是在用户一段时间不 Activity 后隐式注销。与 Android 相同,在较小程度上与 iPhone(可能还有 WebOS)相同。
这需要更加重视应用程序设计,关注业务目标,而不是坚持与以前的应用程序环境相关的实现模型。没有时间或不愿意这样做的开发人员会对打破他们现有思维模型的新环境感到沮丧。这不是任何一种环境的错,更不是 Storm 在山上流动而不是通过它的山的错。
比如一些开发环境,比如Hypercard和 Smalltalk,将应用程序和开发工具混合在一个设置中。除了应用程序的语言扩展(例如, VBA 中的 ExcelLisp in AutoCAD )之外,这个概念并没有流行起来。因此,提出假设应用程序本身存在开发工具的心智模型的开发人员要么不得不改变他们的模型,要么将自己限制在他们的模型适用的环境中。
所以,当你写:

Along with other messy things I discovered, I think that developing our app for Android is not going to happen.


这似乎是最好的,对你来说,现在。同样,我建议您不要尝试将您的应用程序移植到 Web,因为您在 Android 上报告的一些相同问题也会在 Web 应用程序中找到(例如,没有“终止”)。或者,相反,如果有一天你将你的应用程序移植到 Web 上,你可能会发现 Web 应用程序的流程可能更适合 Android,届时你可以重新访问 Android 端口。

关于android - 退出申请是否令人不悦?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2033914/

有关android - 退出申请是否令人不悦?的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  3. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

  4. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  5. ruby - 检查日期是否在过去 7 天内 - 2

    我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/

  6. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  7. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  8. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  9. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  10. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

随机推荐