我已经“继承”了另一名员工的应用程序,现在我必须进行一些修改。出于某种原因,每当我开始活动时,前一个活动就会停止而不是暂停。我查看了THIS answer,但我的应用程序是条码扫描器应用程序(使用相机),没有其他相似之处。我正在启动器活动和其他非相机相关活动之间移动,启动器活动正在停止。这不是android:launchMode="singleTask"
所致,因为我已经从清单中评论了该行。
需要暂停的启动器活动而不是停止的启动器活动的原因是我打算实现一个公共静态ArrayList,我将从其中添加来自其他活动的对象。
有没有人对为什么会这样做有任何想法?这让我发疯了。
答案 0 :(得分:1)
请记住,在内存不足的情况下,有报告称Android操作系统会直接卸载代表您活动的类。这意味着该类中的任何静态变量都将从内存中删除。下次有Activity的实例时,静态var将不为null,但它将为空。我有一个类似的问题,单身人士在一段时间后消失(问题实际上是不负责任的内存使用,但仍然 - 不依赖静态对象来保存数据)
只需序列化对象并保留它们,或序列化其部分数据,并在需要时使用它来创建新对象。
答案 1 :(得分:1)
这是正常行为。只有在可见时,即显示对话框或具有透明背景的其他活动时,活动才会暂停。相反,当您启动一个新的Activity时,如果前一个Activity不再可见,它将进入停止状态。这是最常见的行为!
如果您需要运行后台服务,即持续不同活动的内容,那么您应该使用Service
。
答案 2 :(得分:0)
我认为您的活动因内存使用率过高而被杀死(相机,条形码扫描,分析扫描图像等)。
您可以扩展Application类并在扩展的Application类中实现公共静态ArrayList。您可以找到很多扩展Application类的示例。
答案 3 :(得分:0)
protected void onPause ()
当活动进入后台但被(但)尚未被杀死时,被称为活动生命周期的一部分。 onResume()的对应部分。
当活动B在活动A前面启动时,将在A上调用此回调。在A的onPause()返回之前不会创建B,所以一定不要在这里做任何冗长的事情。
此回调主要用于保存活动正在编辑的任何持久状态,向用户显示“就地编辑”模型,并确保在没有先杀死的情况下没有足够的资源来启动新活动时不会丢失任何内容这个。这也是一个很好的做法,例如停止动画和其他消耗大量CPU的事情,以便尽快切换到下一个活动,或者关闭独占访问的资源,如摄像头。
在系统需要更多内存的情况下,它可能会终止暂停的进程以回收资源。因此,您应该确保在从此函数返回时保存所有状态。通常onSaveInstanceState(Bundle)用于保存活动中的每个实例状态,此方法用于存储全局持久数据(在内容提供者,文件等中)
收到此电话后,您通常会收到以下对onStop()的调用(在下一个活动恢复并显示之后),但在某些情况下会直接回复onResume()而不会通过停止状态。
派生类必须调用超类的此方法的实现。如果他们不这样做,将抛出异常。