我有一个Android应用程序,一旦应用程序开始,就会将自身绑定到远程服务。远程服务为蓝牙摄像机提供抽象,以便我们轻松发送命令并从中接收事件。绑定发生在Application本身上,而不是Activity。对我来说重要的是,只要相机连接到蓝牙就活跃,我的应用程序保持运行,所以我可以从远程服务接收活动。主要原因是我需要知道它是否正在录制,如果是的话,我需要定期发送GPS坐标。

如果我在自己的应用程序中使用服务来管理该服务,我的应用程序会有更好的机会不会被杀死吗?或者我的申请是安全被杀,因为它仍然绑定到远程服务?当然,如果内存要求要求它需要它,但它会杀死我的应用程序,但它会杀死我的应用程序,因为它只是坐在一段时间内没有做太多?

有帮助吗?

解决方案

如果内存低,则只能删除应用程序的过程,但如果您使用服务而不是空进程或背景活动,则会提高流程的感知重要性。您还可以使用StartForeground()使Android将不太可能停止您的服务。

http://developer.android.com/reference/android /app/actity.html#processlifecycle

过程生命周期

Android系统尝试尽可能长时间保持应用程序处理,但最终需要在内存运行低时删除旧过程。如活动生命周期中所述,决定将其删除的过程与用户与其交互的状态密切相关。一般来说,有四个州的过程可以基于运行中的活动,从这里列出。在它诉诸杀死更重要的过程之前,系统将杀死不那么重要的进程(最后一个)(第一个)。

  1. 前景活动(用户当前与之交互的屏幕顶部的活动被认为是最重要的。如果它使用比设备上可用的更多内存,它的过程将仅作为最后的手段杀死。一般来说,该设备已达到存储器寻呼状态,因此需要这是为了保持用户界面响应。
  2. a 可见活动(用户可见但不在前景中可见的活动,例如坐在前景对话框后面)非常重要,除非需要,除非需要杀死保持前景活动运行。
  3. a 背景活动(用户不可见的活动,并且暂停)不再是关键,因此系统可以安全地杀死其进程以回收其他前景或可见进程的内存。如果需要杀死其进程,当用户导航回活动时(再次在屏幕上可见),它将使用先前在OnSaveInstanctate(捆绑)中提供的SavedInstancestate(Bundle)方法调用它可以按照用户持续留下它的相同状态重新启动。
  4. 一个空进程是一个托管没有活动或其他应用程序组件(例如服务或broadcasteceiver类)。由于内存变低,系统非常快速地杀死。出于这个原因,您在活动的上下文中执行的任何背景操作都必须在Activity BroadcastReceiver或服务的上下文中执行,以确保系统知道它需要保持过程。
  5. 有时,活动可能需要执行一个长期运行的操作,这些操作与活动生命周期本身无关。一个例子可以是相机应用程序,允许您将图片上传到网站。上传可能需要很长时间,并且应用程序应允许用户离开应用程序执行。为此,您的活动应该启动上传的服务。这允许系统正确优先顺序(将其考虑到其他不可见应用程序比其他不可见的应用程序更重要),而是独立于原始活动是否暂停,停止或完成。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top