将JobIntentService绑定到Activity

问题描述 投票:2回答:2

我想在Android中运行一个长时间运行的操作。说任务将持续约5-10分钟。出于这个原因,我打算使用JobIntentService并将其绑定到Activity

现在我正在使用AsyncTask,即使我知道AsyncTask不能/不应该用于长时间运行,因此我打算现在改变它。很多时候发生的事情是在任务运行时用户最小化应用程序,之后Android OS关闭/清除Activity以释放一些内存。

所以我的AsyncTask在没有任何目的的情况下继续运行并在尝试更新Activity中的视图时崩溃。

所以我打算用JobIntentService。但是使用JobIntentService并将其绑定到Activity会降低Android操作系统关闭/清除Activity的几率吗?或者它仍然会遵循相同的过程吗?

任何帮助都会非常感激。

java android memory-management service android-asynctask
2个回答
3
投票

如果你的Activity在后台,那么阻止Android杀死你的Activity对我来说听起来不是一个好主意(甚至是必要的)。由于您的Activity位于后台,因此用户无法看到,并且在此期间无需更新UI。

相反,您可以执行以下操作:

如果Activity位于前景,那么它可以通过JobIntentService从您的BroadcastReceiver接收更新,您可以在LocalBroadcastManager中注册/取消注册onResume/onPause

如果JobIntentService已经完成了你的工作,当你的Activity被杀或在后台你可以坚持结果在某处(例如,在SharedPreferences)然后在你的onResumeActivity你可以从SharedPreferences读取结果。


1
投票

不,如果您绑定服务并在“OnResume”生命周期方法中管理绑定(通过ServiceConnection),然后在“OnPause”生命周期方法上取消绑定服务,则不会。 (从未尝试过,但我认为这样可行。如果你在JobIntentService中覆盖OnBind方法的返回,你需要通过启动一个新的Thread来调用“onBind”中的“onHandleWork”)。

(告诉我,如果你需要一些代码示例,我会在有时间时编辑这个答案(:)

快乐的编码。再见

© www.soinside.com 2019 - 2024. All rights reserved.