我想在Android中运行一个长时间运行的操作。假设任务将运行大约5-10分钟。出于这个原因,我计划使用JobIntentService并将其绑定到Activity。
现在我正在使用AsyncTask,尽管我知道AsyncTask不能/不应该用于长时间运行的操作,因此我计划现在就改变它。很多时候,当任务运行时,用户会最小化应用程序,一段时间后,安卓操作系统会关闭/清除Activity,以释放一些内存。
因此,我的AsyncTask在没有任何目的的情况下继续运行,并且在尝试更新Activity中的视图时崩溃。
因此,我计划使用JobIntentService。但是,使用JobIntentService并将其绑定到Activity会减少安卓操作系统关闭/清除Activity的机会吗?或者它仍然会遵循同样的过程?
任何人的帮助都会非常感谢。
发布于 2018-07-26 16:01:00
如果你的Activity在后台,那么阻止安卓杀死你的Activity对我来说听起来不是一个好主意(甚至是必要的)。因为你的Activity在后台,所以它对用户是不可见的,所以在这段时间内不需要更新UI。
相反,您可以执行以下操作:
如果Activity在前台,那么它可以通过BroadcastReceiver从您的JobIntentService接收更新,您可以在LocalBroadcastManager中向onResume/onPause注册/注销这些更新。
如果在你的Activity被杀死时JobIntentService已经完成了它的工作,或者在后台,你可以将结果保存在某个地方(例如,在SharedPreferences中),然后在onResume of your Activity中,你可以从SharedPreferences中读取结果。
发布于 2019-03-25 18:18:17
不,如果你在"OnResume“生命周期方法中绑定服务并管理绑定(通过ServiceConnection),然后在"OnPause”生命周期方法上解除服务绑定,就不会发生这种情况。(从来没有尝试过,但我认为这会起作用。此外,如果在JobIntentService中重写了OnBind方法的返回,则需要通过启动新的线程从"onHandleWork“调用"onBind”)。
(如果您需要一些代码示例,请告诉我,我将在有时间时编辑此答案(:)
祝你编码愉快。再见
https://stackoverflow.com/questions/51508046
复制相似问题