我正在开发Android应用程序,对于Activity堆栈专门处理状态信息的方式有点困惑。我查看了有关此事的活动文档并找到了:
如果屏幕前景中的活动(位于堆栈顶部),则它处于活动状态或正在运行。
如果活动失去焦点但仍然可见(即,新的非全尺寸或透明活动专注于您的活动),则会暂停活动。暂停的活动完全处于活动状态(它维护所有状态和成员信息并保持附加到窗口管理器),但在极低内存情况下可能被系统杀死。
如果某项活动被另一项活动完全遮挡,则会停止该活动。它仍然保留所有状态和成员信息,但是,它不再对用户可见,因此它的窗口是隐藏的,当其他地方需要内存时,它通常会被系统杀死。
如果某个活动暂停或停止,系统可以通过要求完成活动或仅删除其进程来从内存中删除活动。当它再次显示给用户时,必须完全重新启动并恢复到之前的状态。
我有一个名为SongList的活动,该活动仅从另一个活动启动,并且具有启动它的意图,接收一些状态信息。它还可以将用户移动到其他一些单独的活动,但每个活动都有一个后退按钮,将它们带回SongList并使用moveTaskToBack(true)实现;
我的问题是如何知道SongList中的状态变量发生了什么?由于没有任何后退按钮实际上携带状态信息,似乎用户继续进行其他一些活动,当他们回击时,它可能不会将它们带回SongList,或者丢失了所有状态信息,并且这样的工作不当。我是否需要手动处理保存所有这些状态信息?
任何人都可以指出我正确的方向解决这个问题,或者只是填写我可能在文档中解决我关注的任何事情。
提前致谢。
Avtar
答案 0 :(得分:2)
它还可以将用户移动到其他一些单独的活动,但每个活动都有一个后退按钮,将它们带回SongList并使用moveTaskToBack(true)实现;
请允许正常的BACK按钮处理(finish()
,而不是moveTaskToBack()
),除非您有充分的理由不这样做。从统计学的角度来看,你不太可能有其他理由这样做。
我的问题是如何知道SongList中的状态变量发生了什么?
SongList
中的“状态变量”是什么?
如果您指的是启动此Intent
副本的Intent
的{{1}}个附加内容,则他们应该仍然在那里,AFAIK。
由于没有任何后退按钮实际上携带状态信息,似乎用户继续进行其他一些活动,当他们回击时,它可能不会将它们带回SongList,或者已经丢失所有状态信息和工作不当。
完全可能的是,你搞砸的BACK处理(参见我的开头段落)可能会给你带来困难。通常,SongList
附加功能不是BACK按钮处理的问题。
如果您的状态超出了这些额外内容,则需要使用Intent
和onSaveInstanceState()
进行管理,以防Android销毁onRestoreInstanceState()
以释放内存和处理配置更改(屏幕旋转,放置在桌面底座等)。