我有一个使用PagerAdapter的活动应用。在OnCreate事件中,我触发了PagerAdapter中所有7个页面的膨胀。各个页面都有标准小部件,一个页面有一个谷歌地图。在AVD测试时一切正常。
但是如果我的应用暂停或停止然后重新启动或恢复怎么办?页面转换器中所有页面的通胀是否会被删除?我是否必须再次重新填充所有页面?
更一般地......
我已经阅读了很多关于我的应用程序停止或暂停后会发生什么以及重启或恢复时应该做些什么的文章,但我还没有看到需要重建的内容和不需要的内容的精确说明要重建。我读到“这是一个刷新UI的好地方”,但我不确定这意味着什么。
乞讨问题可能是......
是我的内部状态恢复,即我的变量的值,sqlLite db,文件内容。
我的小部件中的值已恢复,即文本框中的字符。
如果在for循环或代码块中间发生暂停或停止,如何防止损坏?
谢谢, 加里
答案 0 :(得分:2)
但是如果我的应用暂停或停止然后重新启动或恢复怎么办? 页面转换器中所有页面的通胀是否会被删除?做 我必须再次重新填充所有页面?
如果你的应用是Activity
,那么当它被暂停时,这只意味着它现在不是焦点Activity
。所有的州都还在那里。这基本上意味着在onResume()
之前您不能接受任何前景事件。如果操作系统决定调用onSaveInstanceState()
,您实际上可以存储实例变量的值或仅用于读取新实例的标志。你不能在这里存储复杂的东西。因此Thread
或Cursor
个实例不合适。基本上任何不是“数据”的东西。
如果活动被破坏甚至进程被杀死,那么是的,您需要重新绑定并重新填充所有内容。然而,这种美丽,在大多数情况下,你不必做任何特别的事情。只有在您onSaveInstanceState()
中写入捆绑包的情况下,您才需要做一些额外的工作。
是我的内部状态恢复,即我的变量的值,sqlLite db,文件内容。
如果转换只在onPause和onResume之间,那么是。一切都应该没问题。如果存在destroy或process kill,则活动将以onCreate()
重新启动,并且必须根据Bundle savedInstanceState
重置所有状态。我稍后会解决sqlite和文件问题。
我的小部件中的值已恢复,即文本框中的字符。
通常,如果他们有saveEnabled(true)
(大多数人)和TextView
,则会有一个freezesText属性,可以让他们记住最后一个文本集。但是,大多数情况下,如果在onSaveInstanceState()
调用期间正确保存状态,则可能存储的状态不仅仅是用于UI,还有其他方式。在这种情况下,您可以在完成下一个onCreate()
如果暂停或停止可能发生,我怎样才能防止损坏? for循环或代码块的中间?
因此主{i}}和onPause()
出现在主UI线程上。如果您当前正在UI线程上运行代码,则必须在这些其他回调发生之前完成。如果您正在运行某个其他线程,那么是的,您必须尝试在UI线程上完成任务的输出。它简化了很多这方面的工作。
即
希望这会有所帮助,虽然它还没有完全完成,但这是一个很好的开始方法。
答案 1 :(得分:0)
在暂停和停止状态下,所有对象都会被保留,您不必担心循环中断,除非完成时间超过5秒,这可能会产生ANR。
但是,在进入这些状态以重新发布不需要或可以轻松重新创建的对象时,这是一种很好的做法,特别是如果它们使用大量内存,并在重新绑定状态Resume或Restart时重新创建它们。
当您的应用程序进入销毁状态时,您的所有对象都将丢失。