【问题标题】:Exit Android App - Kill all processes退出 Android 应用程序 - 终止所有进程
【发布时间】:2012-09-29 02:50:58
【问题描述】:

我们有一个实时视频流应用程序,正在发生很多事情。用户按下主页按钮。我希望将应用程序从内存中删除。当再次选择应用程序时,我们有一个全新的负载。有很多流程正在进行,我们不想手动管理所有连接、流等。这就是我们的 iPhone 版本应用程序的工作方式。

我读过这个:Is quitting an application frowned upon?

无论哪种方式,我都不太关心 Android 的设计模式。但是,如果有人有一个优雅、简单的方法,当按下主页按钮时,我的所有活动都将从堆栈中删除,然后当应用程序重新加载时,它会从一个新的主活动开始,那就太好了。此外,当在 onKeyDown 中按下 home 键时,我似乎无法调试。它根本没有注册。 (keyCode == KeyEvent.KEYCODE_HOME) 是我的支票。它会拾取返回按钮等。

有什么想法吗?

【问题讨论】:

标签: android


【解决方案1】:

您可以致电 system.exit(0);,但我仍然建议您遵循 Android 指南,并在 onPause() 或类似方法上清理所有内容(应该如此)。

【讨论】:

  • system.exit(0) 不是杀死应用程序的保证方法。 Android 操作系统可能只是重置应用的 Activity 堆栈。
【解决方案2】:

你能重写 onPause 方法并使用 finish() 函数吗?

【讨论】:

    【解决方案3】:
    int p = android.os.Process.myPid();
    android.os.Process.killProcess(p);
    

    【讨论】:

    • 以“我并不真正关心 Android 设计模式”开头的那一段怎么样?你读了吗?
    • 此解决方案不保证应用程序以任何方式、形状或形式从内存中删除!你甚至明白“从记忆中删除”是什么意思吗?如果您这样做了,那么您就会知道除非您重新启动手机或卸载您的应用程序,否则您无法强制 Android“删除”任何内容。所以除非你知道如何root你的手机和修改系统文件,否则你可以忘记强迫Android用这种愚蠢的策略真正杀死你的应用程序。为什么你认为任务杀手不起作用?在这种情况下,请遵循 Android 关于完成活动和解除绑定/停止服务的设计指南。
    • 标记我的答案并不能加强你的案例。这只是一个人在争论中失败的迹象。
    • 你不必如此防御
    • 没有什么像 StackOverflow 那样必须费力翻阅一页争吵才能找到任何信息。
    【解决方案4】:

    你可以做的比按钮点击。定义任何静态方法,如 exit() 并定义

    android.os.Process.killProcess(android.os.Process.myPid());在退出方法中

    在主要或第一个活动中。

    然后在按钮点击时调用此方法。

    【讨论】:

    • 这并不能保证您的活动将从堆栈中删除。
    【解决方案5】:

    如果您想从堆栈中清除所有活动,您可以从启动退出的活动中广播一个意图,如下所示:

    Intent broadcastIntent = new Intent();
    broadcastIntent.setAction("CLEAR_STACK");
    sendBroadcast(broadcastIntent);
    

    并且在您想要从堆栈中清除的每个活动中,您都可以创建一个带有内部类的 BroadcastReceiver:

    class ActivitiesBroadcastReceiver extends BroadcastReceiver {
      @Override
      public void onReceive(Context context, Intent intent) {
        finish();
      }
    }
    

    并在 onCreate() 方法中注册您的 BroadcastReceiver:

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("CLEAR_STACK");
    BroadcastReceiver r;
    r = new ActivitiesBroadcastReceiver();
    registerReceiver(r, intentFilter);
    

    【讨论】:

      猜你喜欢
      • 2014-01-06
      • 2011-01-24
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      相关资源
      最近更新 更多