Android AsyncTask 使用

AsyncTask是一个简单的异步任务处理类。

使用AsyncTask
AsyncTask是一个抽象类,要想使用必须创建一个AsyncTask的子类,并覆盖一些必要的方法。

/**
 * Params 代表执行时发给任务的参数类型
 * Progress 后台任务执行中发布的任务进度的类型
 * Result 任务完成后返回的结果类型
 */
class MyTask : AsyncTask<Params, Progress, Result>() {
    override fun onPreExecute() {
        //在执行任务之前在UI线程调用
    }

    override fun doInBackground(vararg params: Params?): Result {
        //在onPreExecute()方法执行后立即在后台线程执行
        //可使用publishProgress()方法发布任务进度
        //必须覆盖
    }

    override fun onProgressUpdate(vararg values: Progress?) {
        //在UI线程调用,publishProgress()方法后调用
    }

    override fun onPostExecute(result: String?) {
        //在UI线程调用,doInBackground()方法返回后调用
    }
}

要想开始任务,请调用execute(Params... params)方法。值得注意的是,AsyncTask必须在UI线程上初始化且execute()方法也必须在UI线程调用。该任务只能被执行一次,如果要执行第二次,将会引发异常。要想取消任务,可以调用cancel(booelan mayInterruptIfRunning)方法。true表示应将执行该任务的线程中断,false表示允许正在执行的任务完成。调用该方法后,onCancelled()会被执行。注意,cancel()方法只是标记了要取消任务,并不会立即结束任务,要想今早结束任务,可以在doInBackground()方法中使用isCancelled()检查是否取消了任务,如果取消了任务,直接break。

使用时的注意点
若AsyncTask被声明为内部类,则可能会引起内存泄露。应将AsyncTask声明为静态,并使用软引用。在Activity或Fragment销毁时调用cancel(true)取消任务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值