我想在Android中运行一个长时间运行的操作。说任务将持续约5-10分钟。出于这个原因,我打算使用JobIntentService
并将其绑定到Activity
。
现在我正在使用AsyncTask
,即使我知道AsyncTask
不能/不应该用于长时间运行,因此我打算现在改变它。很多时候发生的事情是在任务运行时用户最小化应用程序,之后Android OS关闭/清除Activity
以释放一些内存。
所以我的AsyncTask
在没有任何目的的情况下继续运行并在尝试更新Activity
中的视图时崩溃。
所以我打算用JobIntentService
。但是使用JobIntentService
并将其绑定到Activity
会降低Android操作系统关闭/清除Activity
的几率吗?或者它仍然会遵循相同的过程吗?
任何帮助都会非常感激。
如果你的Activity
在后台,那么阻止Android杀死你的Activity
对我来说听起来不是一个好主意(甚至是必要的)。由于您的Activity
位于后台,因此用户无法看到,并且在此期间无需更新UI。
相反,您可以执行以下操作:
如果Activity
位于前景,那么它可以通过JobIntentService
从您的BroadcastReceiver
接收更新,您可以在LocalBroadcastManager
中注册/取消注册onResume/onPause
。
如果JobIntentService
已经完成了你的工作,当你的Activity
被杀或在后台你可以坚持结果在某处(例如,在SharedPreferences
)然后在你的onResume
的Activity
你可以从SharedPreferences
读取结果。
不,如果您绑定服务并在“OnResume”生命周期方法中管理绑定(通过ServiceConnection),然后在“OnPause”生命周期方法上取消绑定服务,则不会。 (从未尝试过,但我认为这样可行。如果你在JobIntentService中覆盖OnBind方法的返回,你需要通过启动一个新的Thread来调用“onBind”中的“onHandleWork”)。
(告诉我,如果你需要一些代码示例,我会在有时间时编辑这个答案(:)
快乐的编码。再见