关于异步任务设计的几点思考

为什么需要异步任务

  1. 手机上的CPU和内存等资源是有限的。
  2. android应用有一个主线程常用于界面的更新。如果所有事情(包括耗时操作,IO操作,网络操作)都在主线程进行,可能因为系统无法及时处理而导致界面卡顿,甚至ANR。
  3. 为了避免ANR,解决卡顿问题,提高应用操作流畅性,我们需要把(耗时操作,IO操作,网络操作)等耗时/耗资源的操作放到异步的子线程中进行。

ANR超时时间在ActivityManagerService.java文件中进行了定义

1.前台broadcast超时时间为10秒,后台broadcast超时时间为60秒
    // How long we allow a receiver to run before giving up on it.
    static final int BROADCAST_FG_TIMEOUT = 10*1000;
    static final int BROADCAST_BG_TIMEOUT = 60*1000;

2.按键无响应的超时时间为5秒
    // How long we wait until we timeout on key dispatching.
    static final int KEY_DISPATCHING_TIMEOUT = 5*1000;

异步任务需要具有的几个特点

界面关联性(Fragment/Activity) 可选

异步任务通常是用来执行耗时操作,最后将执行结果回调给主线程,进行更新界面。
假如,异步任务回调结果的时候,界面已经销毁,又将会发生什么???
应用很可能会崩溃,并抛出以下错误日志:

Java.lang.IllegalStateException Activity has been destroyed

解决办法:
异步任务中保存界面(Fragment/Activity)的弱引用。在将要回调之前,判断界面是否已经被销毁。如果已经被销毁,则不进行回调。

可取消特性 可选

假设异步任务在执行一个耗时的循环操作,此时,用户按返回键退出界面,异步任务怎么处理???
如果该异步任务的目的也是为了更新界面,那么界面销毁,应该及时停止任务,并不进行回调。

解决办法:
创建异步任务的时候,返回一个Cancellable的接口。
用户通过该接口进行取消。在将要回调之前,判断异步任务是否被取消。如果异步任务已经被取消,则不进行回调。

统一线程池 必选

建议统一线程池,所有异步任务都扔给线程池执行。
不推荐直接使用Thread类。

异步任务方案

  1. AsyncTask
  2. 自己封装异步任务(Runnable/Callable)

其中,AsyncTask简单,方便,但缺少可定制性。如果条件允许,建议自己封装异步任务。

时间: 2024-12-23 10:33:16

关于异步任务设计的几点思考的相关文章

关于营销活动设计的5点思考与建议

最近参与一个大的网络活动,了解整个活动的设计之后,今天先整理几点自己关于营销活动设计的5点思考,相信还是可以给到大家一些启发建议. 目的明确 在做营销活动设计时目的尽可能的明确而且单一,很多人喜欢在一个营销活动中融入多个营销目的.而每个目的都会增加用户的操作,最后用户反而觉得体验不好难度太大而放弃参与.比如看到一个抽奖活动,他们先让用户关注微信获得活动链接,然后点击登录,输入手机号码获得登录码,再凭登录码登陆指定网站来抽奖.其中用户不仅要经过4步才能完成,而且要在手机与pc端进行切换,如此设计的

qzone相册照片编辑器设计案例:减少用户思考的简洁设计

网页制作Webjx文章简介:设计案例:简化用户界面,别让用户思考. ·介绍QQ空间相册的个性化利器,能对照片进行效果的优化.文字编辑等等. 从设计上使用了创新的手法,尽量减少用户的思考.其中,通过界面的特殊表现,让用户更容易学会使用.在使用的过程中,也避免了复杂的操作方式,降低使用门槛. ·定位 了解用户需求·用户期望照片编辑工具拥有"玩"照片的成分:·大多数用户反映,最需要的功能是旋转.裁剪.添加照片的边框:·能给照片添加文字.装饰品:·对照片进行颜色或其他效果优化.- 分析用户需求

交互设计过程中如何思考

这两天的状态很好,人在什么都不在乎的情况下越是能完全放空自己.可以从业务.原型中抽离出来,重新审视自己的作品.当然,交互原型不能作为评判一个设计师的标准,它们只是在项目过程中辅助表达设计的产物.最有价值的是,在线稿背后形成一套思考方法,指导你去做设计.之后便是有自己的评判标准,帮助你去衡量设计的优劣.所谓的设计有理有据,大致如此.下面是一些输出,来消灭那些"我觉得-" 1 思考的过程 做一个设计或者重新设计时,应该从哪里开始 首先,从设计目标开始,确定用户最想看到的是什么. 然后,将信

对设计页面制作的思考

设计|页面 国内的网页水平整体来说并不怎么样,主要根源在于多年行业遗传下来的一个诟病,即对制作环节的忽略.也许是市场的因素,这么多年来一直在遏制界面开发人员的深入研究和提高. 网页的设计是一个多元化的技术集合,比平面更讲究,主要有三个方面,模块布局,元素效果,色彩控制. 模块布局:指合理性和人性化方面的原则和创新. 元素效果:指可见的图片,文字的组合或者排列方式. 色彩控制:指视觉效果和用色原则. 其他技巧就和平面类同了,比如视觉突出,特效处理等. 从设计图效果来看,我们又得到另外一种分类,布局

细节思考表单交互设计之必选项思考

每当页面中出现洋洋洒洒的表单,用户就会开始感到头疼,有些用户就会直接选择放弃,而我想讨论的是,如何面对表单时让用户直接注意他们需要填写的必填项,减少不需要的信息的干扰. 必选项是以什么形式出现在现如今的表单中的呢? 1.表单信息的表现类别 下面是一个关于web表单设计的调查报告,这个结果来源于100个令人瞩目的网站. 41%的网站使用标签右对齐 (YouTube, Facebook, Metacafe) 30%的注册表单使用顶端对齐(Behance.net, Wufoo, Tickspot, M

android异步任务设计思详解(AsyncTask)_Android

这里说有设计思想是我根据查看Android源代码提炼出来的代码逻辑,所以不会跟Google工程师的原始设计思想100%符合(也有可能是0%),但是本文一定可以帮助你理解AsyncTask,也可能有一些你以前没有发现的内容. 大家都知道,Android的主线程(又叫UI线程,线程ID为1)有一些限制策略,使得主线程有些事做不了,比如访问网络就不允许,否则就是报,但在2.3之后的版本,你可以通过添加以下代码更改其限制策略,从而强制使得主线程可以访问网络: 复制代码 代码如下: if (android

android异步任务设计思详解(AsyncTask)

这里说有设计思想是我根据查看Android源代码提炼出来的代码逻辑,所以不会跟Google工程师的原始设计思想100%符合(也有可能是0%),但是本文一定可以帮助你理解AsyncTask,也可能有一些你以前没有发现的内容. 大家都知道,Android的主线程(又叫UI线程,线程ID为1)有一些限制策略,使得主线程有些事做不了,比如访问网络就不允许,否则就是报,但在2.3之后的版本,你可以通过添加以下代码更改其限制策略,从而强制使得主线程可以访问网络: 复制代码 代码如下:if (android.

网页表单交互设计细节:表单校验设计的思考

文章描述:表单交互设计之二--校验思考. 你是否经常碰到在填写表单时,提交无数次却还是无法通过校验的情况:或者你是否在为不知道填写中哪里出现错误而抓狂:再或者你是否碰到过当你填写了一大堆信息,之后点击按钮提交时,校验报错的同时,你发现你所填写的所有的信息都被清空:或者你还碰到过很多很多校验当中出现的问题,那么我们现在就开始进行表单校验设计的思考. 那校验有哪些情况呢? 1. READY? 提到校验,我们往往会联系到提交表单后出现的错误提示类信息,但是其实在填写表单前的提示信息与表单填写校验有着莫

用户行动轨迹的产品设计:关于用户行动轨迹设计的思考

文章描述:用户行动轨迹设计杂思.   最近关于LBS是否有泡沫的争论此起彼伏,尤其是对Color模式质疑,甚至传出了国内某某基于Foursquare签到模式的LBS公司要大规模裁员的消息.毋庸置疑的是,LBS是整个移动互联网的基础应用之一,LBS业务模式尚处于探索期.不管现在众多的Foursquare.Color.Kuipp们的模式多么不靠谱,其中有多少的泡沫成分,并不代表LBS本身没有美好的未来,当然未来LBS的成功肯定不单纯只依赖于签到.弹性社交.问答等几个简单模式.     在LBS应用中