Android有时会强行杀死应用程序

我开始活动A,然后开始活动B.
我按回家的button,然后等待很长时间。
当我恢复申请时,强制停止。

02-03 18:42:54.413 828-844/system_process I/ActivityManager: Force stopping ru.tabor.search appid=10089 user=0: from pid 20405 02-03 18:42:54.414 828-844/system_process I/ActivityManager: Killing 30212:ru.tabor.search/u0a89 (adj 7): stop ru.tabor.search 02-03 18:42:54.445 828-5948/system_process I/WindowState: WIN DEATH: Window{18b92c9b u0 ru.tabor.search/ru.tabor.search.modules.authorization.AuthorizationActivity} 02-03 18:42:54.447 828-845/system_process I/WindowState: WIN DEATH: Window{1cd0cfe4 u0 ru.tabor.search/ru.tabor.search.modules.registration.RegistrationActivity} 02-03 18:42:54.519 828-844/system_process I/ActivityManager: Force finishing activity 3 ActivityRecord{25a8977f u0 ru.tabor.search/.modules.authorization.AuthorizationActivity t2593} 02-03 18:42:54.520 828-844/system_process I/ActivityManager: Force finishing activity 3 ActivityRecord{d516838 u0 ru.tabor.search/.modules.registration.RegistrationActivity t2593} 02-03 18:42:54.523 828-20666/system_process W/ActivityManager: Spurious death for ProcessRecord{21ff313b 0:ru.tabor.search/u0a89}, curProc for 30212: null 02-03 18:42:59.890 828-1247/system_process I/ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10100000 cmp=ru.tabor.search/.modules.authorization.AuthorizationActivity} from uid 10089 on display 0 02-03 18:42:59.903 828-1247/system_process V/WindowManager: addAppToken: AppWindowToken{1c4987a0 token=Token{279a08a3 ActivityRecord{9f5afd2 u0 ru.tabor.search/.modules.authorization.AuthorizationActivity t2593}}} to stack=1 task=2593 at 0 02-03 18:42:59.919 828-891/system_process V/WindowManager: Adding window Window{1735e91b u0 Starting ru.tabor.search} at 4 of 8 (after Window{2ab6bf53 u0 com.cleanmaster.mguard/com.keniu.security.main.MainActivity}) 02-03 18:43:19.288 828-1673/system_process I/ActivityManager: Start proc 21366:ru.tabor.search/u0a89 for activity ru.tabor.search/.modules.authorization.AuthorizationActivity 

如何解决它?

Solutions Collecting From Web of "Android有时会强行杀死应用程序"

你是否将一些额外的意图传递给活动? 如果没有,请尝试从您的设备中删除干净的主。

是你的应用程序泄漏? 如果手机内存不足,将会杀死内存pipe理应用程序。 如果在这些活动中有一个进程正在运行,请将其转移到一个服务,并在oncreate内部调用startForeground()。

重新创build一个活动说:

如果系统当前停止并且很长一段时间未使用,或者前台活动需要更多资源,系统也可能会破坏您的活动,因此系统必须closures后台进程才能恢复内存。

所以你不能阻止系统杀死你的应用程序。

为了克服它,你应该重写onRestoreInstanceState方法。 在这种情况下,您可以在系统终止时保存活动状态,然后在您导航回到此活动时进行恢复。

另一种select是实施自己的IntentService 。

服务 API指南引用:

只有在内存不足的情况下,Android系统才会强制停止服务,并且必须为具有用户焦点的活动恢复系统资源。

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

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

另一个重要的部分是Activity的devise考虑,无论持久性数据发生了什么,Activity都应该用一些默认值显示它的UI。 所以假设是这样的, 如果我有数据我会显示,如果我不,我真的不在乎您的用户界面不应该有或没有数据崩溃 。 您可以使用资源 ,例如String.xml ,dimens.xml来存储一些默认值,甚至可以在布局中使用。

如果你仍然想单身课,这是完美的,但确保你每次尝试访问你的单身时做下列检查。

 if (instance==null) instance=CurrentActivity.getInstance() 

getInstance()方法不仅返回你当前的实例,它也将确保

  • 它初始化所有对象和variables
  • 其他单例方法作为实例方法

不要从一个Activity静态访问数据到另一个。 对于现在面临的types问题,特别是对于android来说并不好,也不是很好的OOP编程实践。

我推荐SharedPreference 。 如果符合您的要求,那么保存数据的方法就太好了。

如果你想传递来自不同的Android组件,如活动,服务或BroadcastReciever的数据,你可以把它放在一个包中,并发送意向。 而且,它们一如既往的是SQLLite数据存储,文件IO等等。

希望这会帮助你。

正如我所知,你不能做任何事情! 那就是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 } } 

那就是你所能做的。

大多数情况下,你的应用程序正在被android操作系统杀死,因为内存过载,或者有可能是某种进程正在主线程中运行,你需要检查它。还要覆盖OnResume函数,并检查你得到的结果。