android - 后台 Phonegap 以及 Activity 、流程和服务生命周期之间的关系

标签 android cordova activity-lifecycle

我有一个 Phonegap 应用程序,我想在后台运行一些程序。也就是说,在 Phonegap Activity 不可见时执行一些逻辑。目前,我无法编写本地服务来运行这些过程,因此我希望 Phonegap Activity 本身充当服务。当然,要作为Service运行的逻辑是Javascript,不能作为普通的Android Service来实现。我想到的一个解决方案是通过生成“虚拟”或空服务(利用 startServicestartForeground)将 Phonegap Activity 视为一种伪服务。这个想法是,Phonegap Activity 的生命周期将与服务的生命周期相关联,因此将继续在后台执行 Javascript 代码。

无论您是否了解 Phonegap,我的问题是:如果我通过在其中生成前台服务来确定进程的优先级,这是否会影响 Activity 生命周期?服务(及其进程)是否可能保持 Activity 状态并且主 Activity 已从内存中清除?

如果不能保证 Activity 生命周期会受到影响,您能说说实践中可能发生的情况吗?

最佳答案

One solution I've thought of is to treat the Phonegap Activity as a sort of pseudo-Service by spawning a "dummy" or empty Service (utilizing startService and startForeground).

如果你能做到这一点,你就可以用原生 Java 代码实现实际的服务(而不是仅仅用原生 Java 代码编写一个空服务),你就可以避免所有这些废话。

The idea is that the lifecycle of the Phonegap Activity will be tied to the lifecycle of the Service and will thus continue executing Javascript code in the background.

AFAIK,WebView 既不知道也不关心进程中是否有 Service。当 WebView 不可见时,无法保证 WebView 会无限期地继续执行 JavaScript。而且,由于您的 PhoneGap 应用几乎只是一个 WebView,您所依赖的正是这种未记录的 WebView 行为。

If I prioritize a process by spawning a foreground service within it, does this affect the Activity lifecycle? Is it possible that the service (and its process) stays alive and that the main Activity is cleared from memory?

欢迎用户按下 BACK 按钮,销毁您的 Activity,这不受您是否启动某些服务的影响。

欢迎用户使用任务管理器(例如,Android 4.0+ 上的最近任务列表)来关闭您的后台进程,这不受您是否启动某些服务的影响。

欢迎用户通过“设置”强制停止您的应用,以防止您的代码在未经他们许可的情况下再次运行,并且不受您是否启动某些服务的影响。

欢迎操作系统自行终止您的进程——startForeground() 不是生命周期。

综上所述,在后三种情况下, Activity 和服务将在流程结束时一前一后地消失。只有 BACK 按钮(或调用 finish(),或一些未处理的异常)会导致 Activity 消失但服务会继续存在。

关于android - 后台 Phonegap 以及 Activity 、流程和服务生命周期之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12226703/

相关文章:

android - 启动另一个全屏 Activity 时未调用 Activity 的 onStop()

android - 在 kotlin 中组合标志并清除回溯跟踪

javascript - 完全关闭phonegap android应用程序

android - 尝试设置内容 View 的 PhoneGap Android 插件问题

ios - 如何在 iOS 应用程序中显示 Iframe

android - 在超时警告通知后检索 Activity

javascript - React-Native:状态已更改,但返回旧值

java - 在 libgdx 中隐藏返回、主页和最近使用的应用程序按钮

Android:在仪器测试用例中创建目录

Android - 以编程方式剪切可绘制图像