Android有时强制杀死应用程序

时间:2016-02-03 16:00:19

标签: android

我开始活动A,然后开始活动B.
我按下主页按钮,然后等待很长时间 当我恢复申请时,它强制停止。

val a: Seq[Any] = Seq(1)
a match {
  case b@Seq(_:Int) => b.map(c => println(2 * c) )
  case _ => println("Not matched")
}

如何解决?

7 个答案:

答案 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)

Recreating an Activity说:

  

如果系统当前已停止,系统也可能会破坏您的活动   并且长时间没有使用或前台活动   需要更多资源,因此系统必须关闭后台   恢复记忆的过程。

因此,您无法阻止系统终止您的应用程序。

要克服它,您应该覆盖onRestoreInstanceState方法。在这种情况下,您可以在系统终止时保存活动状态,然后在导航回此活动时恢复。

另一个选择是实施自己的IntentService

来自Services API指南的引用:

  

只有在内存不足时,Android系统才会强制停止服务   它必须为具有用户的活动恢复系统资源   对焦。

答案 4 :(得分:0)

显然Android内存有限,因此虚拟机可以删除任何可能不必要的代码。

查看活动生命周期方法,特别是onResume,并确保您完全理解。很多时候应用程序崩溃只是为了不正确使用Activity生命周期的方法。

另一个重要的部分是Activity的设计考虑因素,无论持久性数据发生什么,你的Activity都应该显示一些默认值的UI。所以假设是这样的,如果我有数据,我会显示,如果我不知道,我真的不在乎您的用户界面永远不会在有或没有数据的情况下崩溃。您可以使用资源,例如String.xmldimens.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模式。这应该起作用。