我正在开发一个Android应用程序,它在服务器上执行登录。只有在此登录后,网络才能访问Internet。互联网连接在30分钟不活动时丢失。 (这真令人讨厌,这就是为什么我要尝试自动化这个......)
因此,想法是创建一个应用程序,其中用户(也就是我懒惰的自己)只输入他的凭据一次,并且在他的余生中,登录会在后台自动发生。
由于我尝试使用最佳做法来避免电池消耗,我首先想到的是必须满足登录需要满足的条件:
我想:使用BroadcastReceiver
,听取CONNECTIVITY_ACTION
,然后检查是否有必要。我阅读了有关Manifest注册接收器的最新更改,并使用了已注册的Context,然后启动了JobService
。但过了一段时间,应用程序不再接收这些操作。
只要注册上下文有效,上下文注册的接收器就会接收广播。
我想知道上下文实际有效多久了?这甚至是实现目标的正确方法吗?
答案 0 :(得分:1)
在同一地方解释:
只要注册上下文有效,上下文注册的接收器就会接收广播。例如,如果您在“活动”上下文中注册,则只要活动未被销毁,您就会收到广播。如果您在应用程序上下文中注册,则只要应用程序正在运行,您就会收到广播。
使用JobService
并使用setRequiredNetworkType
设置所需的网络类型,不要使用BroadcastReceiver
处理网络更改。您可以将事件设置为在设备重新启动后保留。
编辑:我会创建一个具有所需网络类型WIFI的持久JobService
(如果设备连接到WIFI网络,则每次都应该运行)。如果它运行,我会检查,如果设备连接到正确的网络。如果是这种情况,我会开始一个周期< 30分钟。如果您仍然连接到正确的网络并登录(如果需要),此作业将检查。如果设备没有连接到正确的WIFI,我将终止第二个作业。
答案 1 :(得分:0)
可能它与Context本身无关。我认为你在安排后台工作时做错了什么。所以你需要定期设置工作。