android点击按钮app终止运行,android – 当App终止时停止异步任务(调用onDestroyed)

我有一个活动,我使用asyctask的子类与后端服务器进行服务器同步.

鉴于它是一项网络任务,可能需要几秒钟.我担心会发生以下情况.

活动开始,每当asynctask开始运行时,它就会这样做.

onPrexecute()被调用,执行和结束.比doInBackground()被调用,并且这样做,但是,正好在执行该方法时,用户按下主页按钮并从最近的APPS中滑动应用程序. (这个当然导致应用程序终止,并且所有的onDestroy方法都被调用了活着的活动..(如果我在这个问题上错了,请纠正我)).

在我的onPostExecute()方法中,我将数据插入到DB并更新VIEW.

但由于应用程序被“终止”,onPostExecute()方法永远不会运行.

我的问题是:

>当用户按下主页按钮退出应用程序并滑动应用程序时,doInBackground在那一刻停止了吗?也就是说,它是在中间切割而不是继续它的作用?

>我将从服务器获取并放入数据库的数据会发生什么变化?建议将数据放在doInBackground中的db中吗?

解决方法:

> AsyncTask是一个后台任务,即使关闭应用程序并调用onDestroy(),它也会继续运行.问题是当任务进入onPostExecute()并尝试更新与其绑定的活动相关联的任何视图时,因为该活动不再存在.如果你担心这一点,我做的一件事是在调用活动中保持对AsyncTask的引用,然后调用方法myAsyncTaskReference.cancel(true)在调用活动的onDestroy()中取消它.

>是的,我会将数据库操作放在doInBackground()方法中,因为它在后台运行在一个单独的线程上,并且不需要引用应用程序活动.

您是否考虑过使用此类服务​​?我强烈建议使用IntentService,它是服务的子类,专门用于在后台执行单个任务(类似于AsyncTask),然后在完成后自行终止.它实现起来非常简单,通常只涉及覆盖一个方法 – onHandleIntent() – 在服务启动时调用.

它可以处理所有数据库操作,并且它没有引用活动,因此您在#1中担心的问题永远不会发生.如果您需要更新视图,您可以让IntentService在完成后生成广播,并且您的活动可以注册该广播并在收到它时相应地更新它的视图.如果您的活动不再在广播发送之后,则无关紧要,任何事情都不会失败.

标签:android,android-asynctask

来源: https://codeday.me/bug/20190529/1176229.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值