Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果Android需要更多的内存,它可以决定扔掉什么?_Android_Android Activity_Android Service - Fatal编程技术网

如果Android需要更多的内存,它可以决定扔掉什么?

如果Android需要更多的内存,它可以决定扔掉什么?,android,android-activity,android-service,Android,Android Activity,Android Service,我们正在开发一个需要前台服务来收集数据的应用程序。我试图了解Android是如何处理流程及其活动的,如果它绑定到前台服务的话 如果Android需要更多的内存,它可以决定扔掉什么?整个过程还是仅仅是活动?什么是预期行为 后续问题:我们应该听什么样的事件,以确保在发生这种情况时收到信号?活动。预订?它一定会被解雇吗 整个过程还是仅仅是活动 Android终止进程。您可以自己清除活动(例如,调用finish()),当它们被垃圾收集时,Android可以将一些堆空间返回给系统。然而,Android并没

我们正在开发一个需要前台服务来收集数据的应用程序。我试图了解Android是如何处理流程及其活动的,如果它绑定到前台服务的话

如果Android需要更多的内存,它可以决定扔掉什么?整个过程还是仅仅是活动?什么是预期行为

后续问题:我们应该听什么样的事件,以确保在发生这种情况时收到信号?活动。预订?它一定会被解雇吗

整个过程还是仅仅是活动

Android终止进程。您可以自己清除活动(例如,调用
finish()
),当它们被垃圾收集时,Android可以将一些堆空间返回给系统。然而,Android并没有以这种方式主动去除单个组件——这是整个过程,否则什么都没有

后续问题:我们应该听什么样的事件,以确保在发生这种情况时收到信号


进程终止时不会调用任何内容。

如果需要内存,Android确实会终止整个进程

活动被释放,并在销毁后成为垃圾收集的候选对象,从而释放进程中的空间。释放进程中的空间不会影响Android可用的内存

Activity.ondestory被称为最佳努力。可以在不调用onDestroy方法的情况下销毁活动。保证暂停

Android为每个进程分配一个优先级,一个介于-15和16之间的数字,称为oom_adj。数量越大,进程被终止的可能性越大。只有系统应用程序的oom_adj<0。当前可见的应用程序的oom_adj为0。没有UI的进程,但正在运行的服务将位于4-5区域。不可见且没有运行服务的进程将具有更高的oom_adj,而不在后堆栈中的进程将具有最高的值

每个设备都有一个编译后的表,它是Android系统的一部分,将oom_adj值与低内存条件相关联。例如,这张表显示,如果安卓系统的内存不足到最后8m,那么它应该用(比如)12或更高的oom_adj终止任何进程。随着内存状况变得越来越糟糕,Android被允许使用越来越低的oom_adj终止进程


当Android杀死你的进程时,因为它需要内存,它的作用与杀戮9相当。

< P>如果Android系统考虑内存过多,进程将被杀死。 然而,由于您使用的是前台服务,Android将尽力不杀死您的进程,直到内存资源极低。对于您的活动,您应该覆盖以保存数据,以防在此场景中您的活动被终止


另外,为了使您的进程被系统终止以回收资源,您应该尽可能地减少内存占用。您可以在两个进程中分离服务和活动组件,因为活动及其UI资源通常比服务占用更多内存。通过在一个单独的进程中托管活动组件,可以保护您的服务不被活动杀死。

dammit!又被公共软件打败了!:-)所以在进程被终止之前,无法知道何时保存进程的状态?@Sten:正确。状态更改时保存状态。