将JobIntentService绑定到活动

时间:2018-07-24 21:53:13

标签: java android memory-management service android-asynctask

我想在Android中运行长时间运行的操作。假设任务将运行约5-10分钟。因此,我打算使用JobIntentService并将其绑定到Activity

现在我正在使用AsyncTask,尽管我知道{/ {1}}不能/不应该用于长时间运行的操作,因此我打算现在进行更改。很多时候,在任务运行时会发生这种情况,用户会将应用程序最小化,并在一段时间后Android操作系统关闭/清除AsyncTask以释放一些内存。

因此,我的Activity一直没有任何目的地运行,并在尝试更新该AsyncTask中的视图时崩溃。

因此,我打算使用Activity。但是使用JobIntentService并将其绑定到JobIntentService会减少Android操作系统关闭/清除Activity的机会吗?还是会遵循相同的过程?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

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

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

如果Activity在前台,则它可以通过JobIntentServiceBroadcastReceiver接收您在LocalBroadcastManager中向onResume/onPause注册/注销的更新。

如果JobIntentService被杀死时,Activity已经完成工作,或者在后台可以将结果保留在某个地方(例如,在SharedPreferences中),然后在{{1} onResume中的},您可以从Activity中读取该结果。

答案 1 :(得分:1)

否,如果您在“ OnResume”生命周期方法中绑定服务并管理绑定(通过ServiceConnection),然后在“ OnPause”生命周期方法中取消绑定服务,则不会。 (从未尝试过,但我认为这会起作用。另外,如果您在JobIntentService中覆盖OnBind方法的返回,则需要通过启动新线程从“ onBind”调用“ onHandleWork”。)

(告诉我您是否需要一些代码示例,如果有时间,我将编辑此答案(:)

编码愉快。 再见