安卓应用退出按钮

7

我不确定是否需要在我的应用程序中添加退出按钮。这样做有什么意义吗?如果在退出一个活动或服务时没有正确地.finish()或关闭,这会造成很多损害吗?

10个回答

18
您不需要添加退出按钮。如果您不添加,您的活动将一直保留在内存中,直到系统回收它。它不会消耗任何 CPU。
当然,如果您有任何工作线程正在运行,您应该在 onStop() 或 onPause() 中停止它们,具体取决于您的线程正在做什么。
许多应用程序出于某种原因都会添加一个退出按钮。我想原因是他们不相信自己写的代码或者他们不相信 Android 操作系统能够正确地进行清理。
不按照正确的结束程序将不会对其他人造成任何损害,只会损害自己。

我怀疑人们只是在跟随其他应用程序中看到的示例(不一定是 Android 上的示例)。SkeletonApp Android 示例有一个退出按钮... 可能是一个“遗传器官”,这取决于该示例的年龄。 - Mark Storer
1
我见过退出按钮在媒体播放器应用程序中非常有用。您想要能够听音乐并浏览手机,因此您需要退出按钮来显式地关闭它。 - Darcy
Darcy,一个即使你按下退出按钮后仍然继续播放的媒体播放器出现了问题。该活动已经结束,但应用程序仍在后台运行一个服务来为您播放音乐,因此根本没有退出。您所描述的情况是当用户按下返回或主页按钮,或长按主页按钮时的默认行为。因此,不需要退出按钮。在观看进程列表时使用内置播放器进行测试,您将了解其工作原理。 - Robert

8

有人说你不需要一个退出按钮,这是正确的,但是加上一个从来没有坏处。用户喜欢看到一种退出应用程序的方式,这不是关于糟糕的编程,而是关于正确的编程,给用户一个退出按钮,如果他们从未使用它,那就太好了,如果它在那里,那就更好了。


7

你的应用程序不需要一个退出按钮。这是安卓系统的工作原理。用户没有任何方法来真正退出应用程序。

当你调用'finish'时,应用程序堆栈只是被推到后台。它仍然存在于内存中。安卓系统自己决定何时关闭应用程序(即从内存中删除其实例),通常是在您的应用程序成为最长时间未使用的最古老的应用程序时执行。


4

不需要,你可以在developer.android.com上了解活动生命周期。

在旧版本的Android系统中,您需要小心不要意外地保持后台服务运行并占用资源,但现在已经进行了重新设计。


请查看“Activity生命周期”部分:http://developer.android.com/reference/android/app/Activity.html - idbrii

2
你们很正义,但有些情况下“退出”按钮可能是有意义的。比如说,你在YourApplication类(Application的子类)中保存了一些应用程序级别的全局数据,例如一些敏感数据等。当用户关闭最后一个活动并销毁它时,Application不会被终止。按照Android开发者资源所述 - 开发人员不应该依赖于Application.onTerminate()方法。您可以轻松地检查它 - 即使在所有活动都关闭的情况下,Application仍然存在。只要Application实例存在,就相对容易访问这些对象并收集数据。
我已经找到了两种杀死Application类实例的方法:
1. null掉所有对象引用(这在大型项目中几乎不可能),然后调用Garbage Collection
2. 调用android.os.Process.killProcess(android.os.Process.myPid());
因此,“退出”按钮可以有功能来完成所有活动,调用垃圾收集,然后调用killProcess() - 这将保证安全删除存储在Application中的全局数据。

3
这让我哭了。(1)做垃圾回收然后杀死进程是毫无意义的,因为杀死进程会清除所有; (2)将所有对象引用设为空?!?(3)这个关于很容易访问Application对象中数据的说法是什么意思啊?(4)在其他人可以访问的地方放置一些非常敏感的数据,并依赖用户选择“退出”以使数据安全,似乎相当可疑。 - hackbod
barmaley,进程在它们各自独立的内存空间中运行。通过杀死进程,您不会使系统更安全。如果恶意代码可以跨进程边界读取内存,那么它也可以读取已释放的内存。将所有对象引用设置为null,然后杀死进程只是浪费CPU周期。 - Robert

2

我同意barmaley上面的帖子。

长话短说,如果你的问题与安卓系统本身有关,你不需要退出应用程序。放心,开心点。这尤其适用于懒惰的用户(记得旧的塞班系统吗)。

但是,如果您对您的应用程序本身有什么想法,请继续并执行它。您可以完成活动,将其设为空,并结束进程。只需合理,因为一如既往,常识永远比世界上所有教程和参考资料都更好。

无论如何,这只是我的个人看法。


1

我认为一个退出按钮可以让用户确信你的应用已经关闭。

我知道,这并不意味着应用一定已经关闭,但如果用户通过一个退出按钮感觉更加掌控,那么我认为这是一个好主意。


1
从技术角度来看,不需要添加退出按钮,原因如下所述。
不幸的是,用户并不知道这一点,经常会因为必须“使用任务管理器”或“强制关闭”应用程序而降低评分。
这是我的应用程序在评论/反馈中经常收到的请求和批评。因此,为了取悦用户,可能需要添加退出按钮。

0

当我第一次开始为Android编写代码时,我认为手动退出我的主活动是个好主意。但我发现通过stopSelf关闭活动会导致实例状态数据损坏,并在再次打开活动时引起大量ANR。

活动生命周期文档是来自Google框架工程师的信息。每个词都有其原因。

请考虑垃圾回收会占用CPU。这可能看起来微不足道,但在设计移动平台框架时,您会尝试在内存中尽可能缓存多的内容,以防需要再次使用,因为CPU时间=电池电量,从闪存加载代价高昂。

清理整个应用程序的垃圾并不容易,特别是当活动可能被重复使用时。设计必须考虑到所有可能的用例。缓存是有意义的,系统是根据这个原则设计的。

我想说的是,不遵循活动生命周期文档就是在寻求问题。


0
一些应用程序在运行时会更改设备的配置或消耗大量的CPU或数据。您可能希望为用户提供退出应用程序的选项。
有适当使用退出按钮的情况。
例如,我制作的一个应用程序还需要管理WiFi网络:设备配置不断变化。当应用程序处于活动状态时,这种行为是很好的,但在退出应用程序后,用户会期望行为停止。
因此,我的应用程序主要有一个退出按钮来清理它创建的WiFi配置。我可以制作一个停止和清理的按钮,但没有用户会理解。他们只想关闭应用程序,因此选择退出。
  • 应用程序正在运行:由应用程序管理WiFi。
  • 应用程序已退出:DIY/Android WiFi。
目前,在我的应用程序中选择退出会进行清理,然后执行finish(),但应用程序本身仍然在后台运行。功能上没问题,但会让用户感到困惑。我可以制作一个名为“WiFi功能开/关”的切换操作,但这并不会简化事情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接