我开始活动A,然后开始活动B.
我按下主页按钮,然后等待很长时间
当我恢复申请时,它强制停止。
val a: Seq[Any] = Seq(1)
a match {
case b@Seq(_:Int) => b.map(c => println(2 * c) )
case _ => println("Not matched")
}
如何解决?
答案 0 :(得分:0)
据我所知,你不能做任何事情! 这就是android垃圾收集系统的行为!
我记得,android自己做垃圾收集,如果你不在后台长时间使用活动,它将被系统垃圾收集,让ram免费用于其他应用程序和进程。
如果您要保留该活动中的任何信息,请将其保存在此处;
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
}
当你回到那个活动时,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState!=null){
// GET #savedInstanceState AND USE THE OBJECT YOU STORED
}
}
这就是你所能做的一切。
答案 1 :(得分:0)
您是否将某些内容作为Intent extra传递给活动? 如果没有,请尝试从设备中删除干净的主设备。
答案 2 :(得分:0)
你的应用漏洞了吗?如果手机内存不足,它会杀死内存生猪应用程序。如果有一个进程在这些活动上运行,则将其转移到服务并在oncreate中调用startForeground()。
答案 3 :(得分:0)
如果系统当前已停止,系统也可能会破坏您的活动 并且长时间没有使用或前台活动 需要更多资源,因此系统必须关闭后台 恢复记忆的过程。
因此,您无法阻止系统终止您的应用程序。
要克服它,您应该覆盖onRestoreInstanceState方法。在这种情况下,您可以在系统终止时保存活动状态,然后在导航回此活动时恢复。
另一个选择是实施自己的IntentService。
来自Services API指南的引用:
只有在内存不足时,Android系统才会强制停止服务 它必须为具有用户的活动恢复系统资源 对焦。
答案 4 :(得分:0)
显然Android内存有限,因此虚拟机可以删除任何可能不必要的代码。
查看活动生命周期方法,特别是onResume
,并确保您完全理解。很多时候应用程序崩溃只是为了不正确使用Activity生命周期的方法。
另一个重要的部分是Activity的设计考虑因素,无论持久性数据发生什么,你的Activity都应该显示一些默认值的UI。所以假设是这样的,如果我有数据,我会显示,如果我不知道,我真的不在乎。 您的用户界面永远不会在有或没有数据的情况下崩溃。您可以使用资源,例如String.xml
,dimens.xml
来存储某些默认值,甚至可以使用布局。
如果您仍然希望使用单件类,这非常好,但请确保每次尝试访问单件时都进行以下检查。
if (instance==null)
instance=CurrentActivity.getInstance()
getInstance()
方法不仅会返回当前实例,还会确保
不要将数据从一个Activity静态访问到另一个Activity。对于你现在面临的类型问题而言,这对于android来说并不好,而且它也不是很好的OOP编程实践。
我推荐SharedPreference。如果满足您的要求,可以更好地保存数据。
如果您想从不同的Android组件(如Activity,Service或BroadcastReciever)传递数据,您可以将其放在一个包中并按意图发送。而且,它们一直是SQLLite数据存储,文件IO等等。
希望这会对你有所帮助。
答案 5 :(得分:0)
很可能你的应用程序因为内存过载而被Android操作系统杀死,或者你的主线程中有一些进程正在运行你需要检查它。还要覆盖OnResume函数并检查你的结果是什么得到。
答案 6 :(得分:0)
我知道这个问题很老,但是对于那些仍在寻找答案的人,请尝试从Android设置中为您的特定应用关闭电池优化和打Do模式。这应该起作用。