我想在Android中运行长时间运行的操作。假设任务将运行约5-10分钟。因此,我打算使用JobIntentService
并将其绑定到Activity
。
现在我正在使用AsyncTask
,尽管我知道{/ {1}}不能/不应该用于长时间运行的操作,因此我打算现在进行更改。很多时候,在任务运行时会发生这种情况,用户会将应用程序最小化,并在一段时间后Android操作系统关闭/清除AsyncTask
以释放一些内存。
因此,我的Activity
一直没有任何目的地运行,并在尝试更新该AsyncTask
中的视图时崩溃。
因此,我打算使用Activity
。但是使用JobIntentService
并将其绑定到JobIntentService
会减少Android操作系统关闭/清除Activity
的机会吗?还是会遵循相同的过程?
任何帮助将不胜感激。
答案 0 :(得分:2)
如果您的Activity
在后台,那么阻止Android杀死您的Activity
对我来说并不是一个好主意(甚至是必要的)。由于您的Activity
位于背景中,因此用户看不到它,并且在此期间无需更新UI。
相反,您可以执行以下操作:
如果Activity
在前台,则它可以通过JobIntentService
从BroadcastReceiver
接收您在LocalBroadcastManager
中向onResume/onPause
注册/注销的更新。
如果JobIntentService
被杀死时,Activity
已经完成工作,或者在后台可以将结果保留在某个地方(例如,在SharedPreferences
中),然后在{{1} onResume
中的},您可以从Activity
中读取该结果。
答案 1 :(得分:1)
否,如果您在“ OnResume”生命周期方法中绑定服务并管理绑定(通过ServiceConnection),然后在“ OnPause”生命周期方法中取消绑定服务,则不会。 (从未尝试过,但我认为这会起作用。另外,如果您在JobIntentService中覆盖OnBind方法的返回,则需要通过启动新线程从“ onBind”调用“ onHandleWork”。)
(告诉我您是否需要一些代码示例,如果有时间,我将编辑此答案(:)
编码愉快。 再见