Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OnCreate onResume和onRestart问题_Android_Lifecycle - Fatal编程技术网

Android OnCreate onResume和onRestart问题

Android OnCreate onResume和onRestart问题,android,lifecycle,Android,Lifecycle,我有一个使用PagerAdapter的活动应用程序。在OnCreate事件中,我触发PagerAdapter中所有7个页面的膨胀。各种页面都有标准的小部件,一个页面有谷歌地图。在AVD中进行测试时,这一切都很好 但是,如果我的应用程序暂停或停止,然后重新启动或恢复呢?pageradapter中我所有页面的膨胀是否被删除?我必须重新整平所有页面吗 更一般地说 我读过很多关于我的应用程序停止或暂停时会发生什么以及重启或恢复时应该做什么的文章,但我没有看到关于需要重建什么和不需要重建什么的精确说明。我

我有一个使用PagerAdapter的活动应用程序。在OnCreate事件中,我触发PagerAdapter中所有7个页面的膨胀。各种页面都有标准的小部件,一个页面有谷歌地图。在AVD中进行测试时,这一切都很好

但是,如果我的应用程序暂停或停止,然后重新启动或恢复呢?pageradapter中我所有页面的膨胀是否被删除?我必须重新整平所有页面吗

更一般地说

我读过很多关于我的应用程序停止或暂停时会发生什么以及重启或恢复时应该做什么的文章,但我没有看到关于需要重建什么和不需要重建什么的精确说明。我读到“这是一个刷新UI的好地方”,但我不确定这到底意味着什么

乞求的问题可能是

是否恢复了我的内部状态,即变量值、sqlLite db、文件内容

我的小部件中的值是否已还原,即文本框中的字符

如何在一个for循环或代码块的中间发生暂停或停止? 谢谢,


Gary

在状态暂停和停止中,所有对象都被保留,您无需担心循环中的中断,除非完成循环需要5秒以上的时间,这可能会生成ANR

但是,在进入这些状态时,最好重新创建不需要的或可以轻松重新创建的对象,特别是在它们使用大量内存的情况下,并在重新启动状态Resume或Restart时重新创建它们

当应用程序处于销毁状态时,所有对象都将丢失

但是,如果我的应用程序暂停或停止,然后重新启动或恢复呢? pageradapter中我所有页面的膨胀是否被删除?做 我必须重新整平所有的页面

如果你所说的应用程序是指
活动
,当它暂停时,这只意味着它不是当前的重点
活动
。所有的州都还在那里。这基本上意味着您在
onResume()
之前无法接受任何前台事件。如果操作系统决定调用,
onSaveInstanceState()
,您实际上可以存储实例变量的值或新实例要读取的标志等内容。但你不能在这里储存复杂的东西。所以像
Thread
Cursor
实例这样的事情是不合适的。基本上,任何不是“数据”的东西

如果活动被破坏,甚至进程被终止,那么是的,您将需要重新绑定并重新充气所有内容。然而,在大多数情况下,你不需要做任何特别的事情。只有在您可能已在
onSaveInstanceState()
中写入捆绑包的情况下,您才需要做一些额外的工作

是否恢复了我的内部状态,即变量值、sqlLite db、文件内容

如果转换仅在onPause和onResume之间进行,则为yes。一切都会好起来的。如果有销毁或进程终止,活动将使用
onCreate()
重新启动,并且必须根据
Bundle savedInstanceState
重置所有状态。稍后我将处理sqlite和文件

我的小部件中的值是否已还原,即文本框中的字符

通常,如果他们启用了
saveEnabled(true)
(大多数是这样),并且对于
TextView
,有一个冻结文本属性可以让他们记住最后设置的文本。但是,大多数情况下,如果在调用
onSaveInstanceState()
期间正确保存了状态,则很可能存储状态不仅是为了UI,也是为了其他方式。在这种情况下,您最好在执行下一个
onCreate()

如果暂停或停止可能发生在 for循环或代码块的中间

因此,
onPause()
onStop()
出现在主UI线程上。如果您当前正在UI线程上运行代码,则必须在执行这些其他回调之前完成。如果您正在其他线程上运行,那么您必须尝试在UI线程上完成任务的输出。它简化了很多事情

另一方面,杀人是可能发生的。这通常会影响程序内存之外的内容,但当我们谈论损坏时。就像打开了文件句柄、打开了sqlite游标或打开了网络套接字。有了它,你在使用它之前必须检查它的状态

i、 e

  • 在读取或写入目录之前,请确保它们确实存在
  • 确保以前正确写入了文件的内容(简单的预期校验和通常在此处或版本元数据中起作用)
  • 在使用sqlite时使用事务,以确保只将数据以完整的原子块形式写入表中,这样就不会有行引用其他表中不存在的状态的表
  • 网络连接将被重置,您选择的网络协议等内容应负责您的健全性检查,以及所连接的应用程序

希望这能有所帮助,虽然它还没有完全完成,但这是一个很好的开始。

感谢Greg给出了非常完整的答案。