0

我从另一位员工那里“继承”了一个应用程序,现在我必须进行一些修改。并且由于某种原因,每当我开始一项活动时,前一项活动就会停止而不是暂停。我看过这个答案,但是虽然我的应用程序是条形码扫描仪应用程序(使用相机),但没有其他相似之处。我正在启动器活动和其他非相机相关活动之间移动,并且启动器活动正在停止。这不是 android:launchMode="singleTask"因为我已经从清单中评论了该行。

需要暂停启动器活动而不是停止的原因是我打算实现一个公共静态 ArrayList,我将从其他活动中添加对象。

有没有人知道为什么会这样?这让我疯狂。

4

4 回答 4

1

这是正常行为。一个活动只有在可见时才会暂停,即当显示一个对话框或另一个具有透明背景的活动时。相反,当你启动一个新的 Activity 时,如果前一个 Activity 不再可见,它就会进入停止状态。这是最常见的行为!

如果您需要运行一个后台服务,即跨不同活动持续的东西,那么您应该使用Service.

于 2013-07-18T05:53:28.317 回答
1

请记住,在内存不足的情况下,有报道称 Android 操作系统会直接卸载代表您的活动的类。这意味着该类中的任何静态变量都将从内存中删除。下次你有一个 Activity 实例时,静态 var 不会为空,而是为空。我有一个类似的问题,单例在一段时间后就消失了(问题实际上是不负责任的内存使用,但仍然 - 不要依赖静态对象来持久化数据)

只需序列化您的对象并持久化它们,或者序列化它们的部分数据并在需要时使用它来创建新对象。

于 2013-07-17T07:44:33.293 回答
0

文档中:

protected void onPause ()

当活动进入后台但尚未(尚未)被杀死时,作为活动生命周期的一部分调用。onResume() 的对应项。

当活动 B 在活动 A 之前启动时,将在 A 上调用此回调。在 A 的 onPause() 返回之前不会创建 B,因此请确保此处不要做任何冗长的事情。

此回调主要用于保存活动正在编辑的任何持久状态,向用户呈现“就地编辑”模型,并确保如果没有足够的资源来启动新活动而没有首先杀死该活动,则不会丢失任何内容。这也是一个很好的地方来做一些事情,比如停止动画和其他消耗大量 CPU 的事情,以便尽快切换到下一个活动,或者关闭诸如相机之类的独占访问资源。

在系统需要更多内存的情况下,它可能会终止暂停的进程以回收资源。因此,您应该确保在您从此函数返回时保存所有状态。通常 onSaveInstanceState(Bundle) 用于在活动中保存每个实例的状态,此方法用于存储全局持久数据(在内容提供程序、文件等中)

收到此调用后,您通常会收到对 onStop() 的后续调用(在下一个活动已恢复并显示后),但是在某些情况下会直接调用 onResume() 而不会进入停止状态。

派生类必须调用该方法的超类实现。如果他们不这样做,将引发异常。

于 2013-07-17T07:34:47.070 回答
0

我认为由于内存使用率高(相机、条形码扫描、分析扫描图像等),您的活动已被终止。

您可以扩展 Application 类并在扩展的 Application 类中实现您的公共静态 ArrayList。您可以找到很多如何扩展 Application 类的示例。

于 2013-07-17T07:31:14.877 回答