【问题标题】:android process still alive after finishing activities完成活动后android进程仍然存在
【发布时间】:2011-07-15 13:54:37
【问题描述】:

我的应用程序启动了 3 个活动。 当我想退出时,我关闭这 3 个调用完成方法的活动。然后调用活动 onDestroy 方法,但该过程仍然存在...... 这怎么可能 ?

【问题讨论】:

  • 您是否确保清理了 onDestroy() 回调中的所有内容?确保您取消注册内容提供商等并关闭所有连接。
  • 您的活动是否包含任何服务

标签: android process android-activity


【解决方案1】:

这是完全正常的。 Android 将保留您的进程,直到它需要回收该进程的内存为止。这样,如果用户立即返回到您的应用程序,您的应用程序将显示得更快——Android 不必分叉一个进程并将您的应用程序加载到内存中。

【讨论】:

  • 问题是我有很多静态变量!!当用户回到我的应用程序时,他们处于未定义状态。
  • 我需要在用户退出应用程序时正确终止我的进程
  • @Arutha:不,你没有。你需要在编码方面做得更好。在任何时候都不能保证静态数据成员是否存在。这与您是否调用finish() 无关,因为在许多其他情况下,用户将放弃您的应用程序,Android 将摆脱您的活动(例如,用户按 HOME 并且不返回)。如果要使用静态数据成员,则必须处理它们是否存在的情况。如果您不能这样做,请不要使用静态数据成员。
  • 真的没有办法强制杀死当前进程吗?
  • @Darpan:只要进程存在,静态数据成员就存在。一个进程在进入后台后可能只能存活几毫秒。如果你想persist数据,把它写到一个persistent的地方:数据库,SharedPreferences,或者其他形式的文件。
【解决方案2】:

试试:

System.exit(0);

它会杀死你的活动进程。

编辑: 如下面的 cmets 所述。这效果更好: android.os.Process.killProcess(android.os.Process.myPid());

【讨论】:

  • 在我们的应用程序中避免使用 System.exit(0) 的原因有很多……但是“android.os.Process.killProcess(android.os.Process.myPid());”效果更好...
  • 不知道。谢谢!
  • 为什么效果更好?我没有发现 System.exit 与 killProcess 的效果有任何区别。
猜你喜欢
  • 2012-09-07
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
相关资源
最近更新 更多