【问题标题】:How long is an Android Context valid?Android Context 的有效期是多久?
【发布时间】:2018-01-19 11:25:02
【问题描述】:

我正在开发一个在服务器上执行登录的 Android 应用程序。只有在此登录后,网络才能访问 Internet。不活动 30 分钟后,互联网连接将丢失。 (这真的很烦人,这就是我试图自动化它的原因......)

所以想法是创建一个应用程序,用户(也就是我懒惰的自我)只输入一次他的凭据,并且在他的余生中,登录会在后台自动发生。

当我尝试使用最佳实践来避免电池耗尽时,我首先想到了登录必须满足的条件:

  • 手机必须连接到 Wifi。
  • wifi 有一个特定的名称(因为只有某些 Wifi 需要登录)
  • wifi 没有互联网连接。

我想:使用BroadcastReceiver,收听CONNECTIVITY_ACTION,然后检查必要性。我阅读了有关清单注册接收器的最新更改,并使用了上下文注册的接收器,然后启动了JobService。但过了一段时间,应用程序不再接收这些操作。

由于Android Developer website 声明:

只要注册上下文有效,上下文注册的接收者就会接收广播。

我想知道上下文实际有效多长时间?这甚至是实现我的目标的正确方法吗?

【问题讨论】:

  • 据我了解,上下文仅在上下文所有者(应用程序、活动或服务)有效之前有效。对于活动,假设调用 onDestroy 意味着上下文不再有效。

标签: android broadcastreceiver android-context


【解决方案1】:

在同一个地方解释:

只要注册上下文有效,上下文注册的接收者就会接收广播。例如,如果您在 Activity 上下文中注册,只要该 Activity 未销毁,您就会收到广播。如果您在应用程序上下文中注册,只要应用程序正在运行,您就会收到广播。

使用JobService 并使用setRequiredNetworkType 设置所需的网络类型,不要使用BroadcastReceiver 处理网络更改。您可以将您的作业设置为在设备重新启动后保持不变。

编辑:我将创建一个具有所需网络类型 WIFI 的持久性JobService(如果设备连接到 WIFI 网络,则每次都应运行)。如果它运行,我会检查设备是否连接到正确的网络。如果是这种情况,我将开始一个周期

【讨论】:

  • 我无法创建一个存在较长时间的作业。你能给我举一个这样的周期性工作的例子吗?
  • 你的“延长时间”有多长,为什么需要长时间运行Service
  • 编辑了问题以澄清这一点。
  • @David 检查我的答案以获得解决方案。
【解决方案2】:

可能与上下文本身无关。我认为您在安排后台作业时做错了。因此,您需要将作业设置为定期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2016-10-21
    • 2015-07-30
    相关资源
    最近更新 更多