【问题标题】:Android app terminateAndroid 应用程序终止
【发布时间】:2013-08-14 19:52:11
【问题描述】:

我真的需要能够在单击菜单按钮时终止应用程序。 我的菜单工作正常,但是当我尝试终止/终止应用程序时,它只会关闭当前活动并打开前一个活动。

  • 我需要能够使用后退按钮或我设计的导航按钮在应用中的活动之间来回导航
  • 在菜单中,我添加了一个退出应用的按钮,在点击事件中,我输入了代码

    android.os.Process.killProcess(android.os.Process.myPid())

  • 但是什么也没发生,我的意思是它是一样的。行为类似于 Finish()。单击该按钮时,我需要完成所有活动。

  • 我非常讨厌后退按钮,当您深入应用程序并导航几分钟,然后当您想要关闭应用程序时...不点击主页按钮,它需要您可以用几乎相同的时间返回之前执行的所有步骤,反过来……至少可以说很烦人。
  • 另外,我的应用程序对几乎每个 Activity 都发出 HTTP 请求 onCreate,因此我的应用程序在“返回”时会产生双倍的互联网流量。 “是”我的应用程序需要这样做。我无法在本地缓存我的数据库并从这里使用它,因为我的应用程序将被多个用户同时使用,并且他们每次进入 Activity 时都需要查看更新的数据
  • 我不希望/不需要我的应用保持打开状态以供将来使用。我的应用程序将需要用户+通行证身份验证,并且我需要提供在用户想要注销它时能够关闭它的安全性,这样他就可以在去上厕所时将手机安全地放在桌子上(这只是一个示例)。
  • 我不需要关于为什么 Android 不希望我关闭我的应用程序的讲座...我不关心 Android 希望我做什么我想做的事更重要。如果我的用户无人看管他的手机,任何人都可以启动应用程序并登录并查看我的应用程序存储的任何信息,所以不,我不希望我的应用程序逗留。当用户选择停止它时,我希望它STOPPED

那么请告诉我该怎么做? 我尝试在清单中添加:

<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

对于每个活动,然后在我开始活动时添加:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

什么都没有改变...当我单击退出按钮时,当前活动完成并显示先前的活动。我讨厌这个。 请告诉我该怎么做。

有很多 TaskManager 应用程序可以让您完成其他应用程序,因此必须有一种方法能够完成您自己的应用程序...

谢谢

【问题讨论】:

  • 你可以尖叫/加粗所有你想要的关于你如何不关心某些事情的句子,但最终你为了“安全”而试图编造自己的规则。最好的方法是让您的应用程序按预期运行。不要制定自己的“规则”,然后抱怨它并不像应有的那么容易。如果您希望用户能够注销,为什么不添加一个“注销”按钮?或者超时后注销,失去焦点(按下主页按钮)等? (所以保持一个“状态”而不是作为你的基础运行/关闭)
  • 最好的办法是使用 startActivityForResult 而不是 startActivity 来启动你的下一个 Activity。我的意思是,如果您当前处于活动 A 并开始活动 B,则使用 startActivityForResult。然后当活动 B 是完成()。然后在 Activity A 的 onActivityResult 方法中,你可以传递一个唯一的请求代码来识别 Activity B 已经调用了 finish() 并希望应用程序退出。然后就可以调用Activity A的finish()方法了。
  • @ArshadParwez 不,这不是最好的主意。最好的主意是不要强制活动退出。无论如何finish() 不会退出 Activity,它会告诉 Android 不再需要这个 Activity。
  • @m0skit0 :我已经实现了我在上面评论的相同的东西,以退出我的应用程序并且它工作正常。此外 this.finish() 是结束 Activity 的正确方法,它不会强制 Activity 退出。相反,它的 System.exit(0) 会强制 Activity 退出。
  • 我没有说它不起作用。我说这不是最好的主意。我的意思是finish() 并没有真正退出Activity。何时销毁 Activity 取决于 Android,因此即使您看不到 Activity 实例,它也可能仍然存在,潜在的攻击者可以利用它从该实例中恢复数据。 System#exitActivity#finish 做了两件完全不同的事情:第一个退出 JVM(它会终止进程并因此退出应用程序),而第二个将 Activity 标记为不需要(不必退出进程)。

标签: android


【解决方案1】:

System.exit 退出 JVM 并有效杀死 VM 进程。

关于您的“假定”需要退出应用程序的一些注释,恕我直言,这并不能证明终止应用程序并给用户使用您的应用程序的体验带来更糟糕的体验,并且还会影响其他应用程序和运行它的设备作为一个整体。

我非常讨厌在应用程序深处输入后退按钮,并且 导航几分钟,然后当你想关闭 应用程序...无需单击主页按钮,它几乎与您相同 多少时间来回顾你之前所做的所有步骤, 反过来……至少可以说很烦人。

这就是为什么它被称为“返回”而不是“退出”。您可以对浏览器中的“返回”按钮说同样的话。

另外,我的应用对几乎每个 Activity 都发出 HTTP 请求 onCreate,所以 “返回”时,我的应用会产生双倍的互联网流量

不知道为什么回去会造成双倍流量。你说它应该刷新,所以后面如果你想刷新,你需要再次进行HTTP查询。我看不出这有什么问题。

我不希望/不需要我的应用保持打开状态以供将来使用。我的应用程序将 需要用户+通过身份验证,我需要提供安全性 当用户想要注销它时能够关闭它

您无需为此退出。当用户离开您的应用程序时,您可以将其标记为未登录。这样,您可以在用户每次返回时询问 + pass 并保持显示相同的 Activity,这样他/她就不必再次导航到该 Activity。

我不需要关于为什么 Android 不希望我关闭我的 应用程序...我不在乎 Android 想要我做什么。

然后,您的应用每次返回时启动速度都会变慢,消耗更多电池等等。 Android 应用程序开发指南不是“仅仅因为”。您需要遵循此准则的一个重要原因是:因为这就是 Android 的工作原理。

【讨论】:

  • 1.据我所知 System.exit ...它会关闭所有依赖于 Java 虚拟机的应用程序当时正在运行.. 2. 我同意您关于浏览器中的后退按钮的观点,但浏览器允许您关闭 TAB 或甚至是浏览器,而 Android 没有。 3. OnStartIntent 我向外部 php 发出 HTTP POST,该 php 检索用于填充微调器或列表视图的数据,所以每次我去一个新活动时我都会产生流量,所以我试图避免添加到用户的不必要的 POST 和 GETS电话数据账单。
  • 4.这将是一个解决方案,但是当应用程序被主页或重复的后退按钮“最小化”时,我在哪里访问事件?
  • 5.我理解为什么 Android 希望应用程序以这种方式运行。但有些应用程序可能需要这个。我的应用程序不会每次都关闭。仍然会有 Home 和 Back 按钮功能,但是当用户想要关闭它时,他应该能够做到这一点,而无需使用 Task Killer 应用程序。此外,许多运行 Android 的手机资源有限,这迫使用户手动终止正在运行的应用程序,以便能够运行其他新应用程序。因此,令人钦佩的 Android 逻辑在幻想世界中运行良好,但现实迫使我们做出妥协。
  • 1.在 Android 中,每个应用都有自己的 JVM,所以这不是问题
  • 3.然后你可以检查这是否已经完成并且不再重复。
【解决方案2】:

不要这样做,操作系统会告诉我们何时应该终止应用程序。你永远不能关闭你的应用程序。

【讨论】:

  • 当然你可以关闭你的应用程序。关键是你不应该
  • 我知道我不应该。但是 TaskKiller 应用程序不应该存在或应该被禁止 :) 我想给我的用户一个额外的选择。除了隐藏应用之外,我还想让他能够杀死他的应用。如果 taskKiller 应用存在并且有理由存在,那么我的功能也存在。
  • @user1137313 你应该非常仔细地跟踪你的活动后台。
  • @user1137313 System.exit 或其他功能无法实现您的观点。如果 OS 或其他 App 与您的 App 共享资源,您的 App 或您 App 的进程将在您调用这些函数后重新激活。
【解决方案3】:

更换你的线路

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

并尝试。它适用于我的情况......我希望它也能帮助你。

【讨论】:

    【解决方案4】:

    只需在退出按钮点击事件中使用这个:

     System.exit(0);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 2015-04-21
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      相关资源
      最近更新 更多