【问题标题】:Android onStop/onDestroy - when might these be used?Android onStop/onDestroy - 什么时候可以使用这些?
【发布时间】:2011-08-29 21:47:10
【问题描述】:

查看活动生命周期图,我注意到onPause()onStop() 都可能导致“进程”被杀死。当用户想要恢复他们的应用程序时,这将需要调用onCreate()。重点是onStop() 不一定被调用,onDestroy() 也不一定被调用,但onPause() 可能是 Activity 可能看到的唯一事件。在这种情况下,onPause() 必须处理保存应用程序状态,以便用户稍后可以返回到它,无论是否调用了 onStop()

我可以看到onDestroy() 用于清理活动特定资源,这些资源会在进程终止操作中自然消除。 onDestroy() 还有什么用处吗?

onStop() 有什么用?我为什么要覆盖它?

【问题讨论】:

    标签: android


    【解决方案1】:

    如果我的问题是正确的:这取决于您想对您的应用程序做什么。假设您正在编写使用 GPS 的应用程序。在用户不再可见活动时调用的onStop() 中,您可以删除这些请求。或者,如果您的应用程序正在运行,您可以停止某些服务。或者您可以保存首选项(不推荐,改为在onPause() 中进行),或者您可以关闭与服务器的永久连接.....如果我想到其他任何内容,我会添加更多...

    【讨论】:

    • 对不起,我指的是onStop(),脑瘫。 :) 我会编辑我的答案
    • 所以听起来你使用 onStop() 来响应活动不再可见,并且 onPause() 释放 GPS 提供程序还为时过早。但我担心的是进程终止可能无法正确处理资源的释放。
    【解决方案2】:

    如果您进一步阅读了该文档,您将看到以下内容:

    保存活动状态

    Management the Activity Lifecycle 的介绍中简要提到 当活动暂停或停止时,活动的状态 被保留。这是真的,因为 Activity 对象仍被保存在 暂停或停止时的内存——关于其成员的所有信息 并且当前状态仍然存在。因此,用户所做的任何更改 活动内都保留在内存中,这样当活动 返回前台(当它“恢复”时),这些更改仍然存在 在那里。

    但是,当系统为了恢复而销毁一个活动时 内存,Activity对象被销毁,所以系统不能简单 恢复它的状态不变。相反,系统必须重新创建 如果用户导航回它,则为 Activity 对象。然而,用户是 不知道系统破坏了活动并重新创建了它,并且, 因此,可能期望活动完全按照原来的样子。在这个 情况下,您可以确保有关的重要信息 通过实现额外的回调来保留活动状态 允许您保存有关您的状态信息的方法 活动,然后在系统重新创建 活动。

    总结:完成onStop()之后Activity对象在内存中还活着。这将有助于系统恢复活动。

    非常基本的示例:假设您正在向用户展示您的活动,突然您的朋友打电话给您!休息你可以理解..

    所以现在由您决定,应该在哪个事件上释放哪些资源/对象/连接。

    【讨论】:

      【解决方案3】:

      另一个例子是注册和注销广播接收器。

      请注意,这些东西通常放在 onResume 和 onPause 中,但区别很细微,当 Activity 被放置在另一个 Activity 之后时调用 onResume/onPause,当屏幕中不再可见时调用 onStart/onStop .

      【讨论】:

      • 另一个微妙的区别是如果它们是启动和停止,当不调用 onStop 但进程被终止时会发生什么?广播接收器是否完全未注册?我认为是的。
      猜你喜欢
      • 2011-02-24
      • 2010-09-15
      • 2014-06-24
      • 1970-01-01
      • 2011-07-20
      • 2012-07-09
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多