Android讲义3---第三章---异步任务

来源:互联网 发布:java debug模式 编辑:程序博客网 时间:2024/06/16 18:33
Android默认的UI线程阻塞超时是20秒,超过会出现ANR提示。即 等待还是停止 对话框。
繁琐的处理都推荐在新线程处理,但是新线程不能直接更新UI组件,所以Android提供以下解决方案:
1:使用Handler实现线程之间的通讯
2:Activity.runOnUiThread(Runnable)
3:View.post(Runnable)
4:View.postDelayed(Runnable,long)

有更好的方法是使用AsyncTask---异步任务。
AsyncTask<Params,Progress,Result>是一个抽象类,通常用于被继承。
参数解释:
Params:启动任务执行的输入参数
Progress:后天任务完成的进度值
Result:后天执行任务后完成后返回结果

使用AsyncTask需要三步:
1:创建AsyncTask的子类,并为三个泛型参数指定类型,不需要则指定为void。
2:根据需要,实现AsyncTask的如下方法:
doInBackground:重写该方法就是后天将要完成的任务,该方法可以调用publishProgress方法更新执行进度
onProgressUpdate:在doInBackground中调用publishProgress后会触发此方法
onPreExecute:该方法将在执行后台耗时操作前被调用,用于完成初始化工作
onPostExecute:当doInBackground完成后,系统回调该方法,并将doInBackground中的返回值给该方法

3:调用AsyncTask的execute开始执行耗时任务
使用原则:
必须在UI线程中创建AsyncTask实例
必须在UI线程中调用AsyncTask的execute方法
第2点的所有方法,应该是系统回调的,不应该由程序员调用
每个AsyncTask只能被执行一次,多次调用会引发异常