首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

啰嗦一下android中的NetworkOnMainThreadException

严格模式可以帮助开发者发现主线程中的磁盘操作和网络操作,开发者根据严格模式的输出信息可以改善程序来更好地响应用户操作,来较少ANR(程序未响应)的问题。...1 2 3 4 5 6 7 new AsyncTask() { @Override protected Void doInBackground(Void...,由于Java中非static内部类实例会持有外部类实例的引用,AsyncTask实例持有Activity的引用,这样很容易引起内存泄露 按照Android官方文档支出,AsyncTask被推荐为处理短时间...更详细的关于AsyncTask请参考Android中糟糕的AsyncTask 这样也不好 既然AsyncTask可能导致内存泄露并且不适用于长时间操作,那么这样呢 1 2 3 4 5 6 7 new Thread...解决上述两处内部类可能引起的内存泄露问题 将AsyncTask或者Thread的子类作为单独的文件,不持有Activity的强引用 将AsyncTask或者Thread的子类使用static修饰,则不会隐式持有

2.2K20

使用AsyncTask异步更新UI界面及原理分析

概述: AsyncTask是在Android SDK 1.5之后推出的一个方便编写后台线程与UI线程交互的辅助类。...AsyncTask抽象出后台线程运行的五个状态,分别是:1、准备运行,2、正在后台运行,3、进度更新,4、完成后台任务,5、取消任务,对于这五个阶段,AsyncTask提供了五个回调函数: 1、准备运行...2、正在后台运行:doInBackground(Params...),该回调函数由后台线程在onPreExecute()方法执行结束后立即调用。通常在这里执行耗时的后台计算。...子类中实现的doInBackground(mParams)方法,由此可见,WorkerRunnable封装了我们要执行的异步任务。...总结:1、 AsyncTask的本质是一个静态的线程池,AsyncTask派生出的子类可以实现不同的异步任务,这些任务都是提交到静态的线程池中执行。

1.4K110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android多线程-AsyncTaskyi(一)

    ok~,最后看看我们的运行结果: image.png   效果符合预期,通过这个案例,相信我们对AsyncTask的使用已相当清晰了。...其实以前我也只是知道这回事而已,不过最近在SDK开发中遇到了AsyncTask的开发问题,产生问题的场景是这样的,我们团队在SDK中使用了AsyncTask作为网络请求类,因为现在大部分系统都是在Android...3.0以上的系统运行的,所以默认就是串行运行,一开始SDK在海外版往外提供也没有出现什么问题,直到后面我们提供国内一个publisher海外版本时,问题就出现了,该publisher接入我们的SDK后...AsyncTask默认是串行执行的,所以!!只有等我们的SDK网络加载完成后,他们应用才开始加载网络数据,这就造成应用的网络加载延迟十分严重了。...后面我们SDK在内部把AsyncTask改为并行任务后问题也就解决了(当然这也是SDK的一个BUG,考虑欠佳)。

    63520

    Android多线程:AsyncTask使用教程(含实例讲解)

    定义 一个Android 已封装好的轻量级异步类 属于抽象类,即使用时需 实现子类 public abstract class AsyncTask {...若有不同业务,需额外再写1个AsyncTask的子类 } 4.2 核心方法 AsyncTask 核心 & 常用的方法如下: 方法执行顺序如下 5....使用步骤 AsyncTask的使用步骤有4个: 创建 AsyncTask 子类 & 根据需求实现核心方法 创建 AsyncTask子类的实例对象(即 任务实例) 手动调用execute(()从而执行异步线程任务...具体介绍如下 /** * 步骤1:创建AsyncTask子类 * 注: * a....的静态内部类 7.3 线程任务执行结果 丢失 结论 当Activity重新创建时(屏幕旋转 / Activity被意外销毁时后恢复),之前运行的AsyncTask(非静态的内部类)持有的之前Activity

    83420

    Android 多线程:这是一份详细的AsyncTask使用教程

    定义 一个Android 已封装好的轻量级异步类 属于抽象类,即使用时需 实现子类 public abstract class AsyncTask {...若有不同业务,需额外再写1个AsyncTask的子类 } 4.2 核心方法 AsyncTask 核心 & 常用的方法如下: ? 方法执行顺序如下 ? ---- 5....使用步骤 AsyncTask的使用步骤有4个: 创建 AsyncTask 子类 & 根据需求实现核心方法 创建 AsyncTask子类的实例对象(即 任务实例) 手动调用execute(()从而执行异步线程任务...具体介绍如下 /** * 步骤1:创建AsyncTask子类 * 注: * a....的静态内部类 7.3 线程任务执行结果 丢失 结论 当Activity重新创建时(屏幕旋转 / Activity被意外销毁时后恢复),之前运行的AsyncTask(非静态的内部类)持有的之前Activity

    1.3K30

    Android AsyncTask异步处理

    为了解决这个问题,Android 1.5提供了一个工具类:AsyncTask 它使创建需要与用户界面交互的长时间运行的任务变得更简单,不需要借助线程和Handler即可实现。 ...1) 子类化AsyncTask  2) 实现AsyncTask中定义的下面一个或几个方法  (a)onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。...(b)doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。...:name="android.permission.INTERNET" /> 运行结果: ?...源码下载 参考推荐: AsyncTask的用法 Android 进程和线程模型 Android AsyncTask与handler Android实现计时与倒计时的几种方法

    1.2K30

    Android Handler机制13之AsyncTask源码解析

    7、AsyncTask与Handler AsyncTask官网 AsyncTask源码 一、AsyncTask概述 我们都知道,Android UI线程是不安全的,如果想要在子线程里面进行UI操作...二、基本用法 AsyncTask是一个抽象类,我们需要创建子类去继承它,并且重写一些方法。...用法:AsyncTask必须由子类实现后才能使用,它的子类至少重写doInBackground()这个方法,并且通常也会重写onPostExecute()这个方法 下面是一个继承AsyncTask类的一个子类的例子...如果异步任务不需要上面类型,则可以需要声明类型未使用,通过使用Void来表示类型未使用。...这个方法通常与THREAD_POOL_EXECUTOR一起使用,这样可以让多个人物在AsyncTask管理的线程池上并行运行,但你也可以使用自定义的Executor。

    81310

    Android 多线程:AsyncTask的原理 及其源码分析

    前言 AsyncTask在Android开发中是十分常见的 今天,我将全面讲解AsyncTask的源码,希望你们会喜欢 请先看文章:Android 多线程:AsyncTask最详细使用教程...若有不同业务,需额外再写1个AsyncTask的子类 } 3.2 核心方法 AsyncTask 核心 & 常用的方法如下: ? 方法执行顺序如下 ? ---- 4....源码分析 本次源码分析将根据 AsyncTask的使用步骤讲解 若不熟悉,请务必看文章:Android 多线程:AsyncTask最详细使用教程 AsyncTask的使用步骤有4个: 创建...AsyncTask 子类 & 根据需求实现核心方法 创建 AsyncTask子类的实例对象(即 任务实例) 手动调用execute(()从而执行异步线程任务 具体介绍如下 /** * 步骤1:创建AsyncTask...子类的实例对象(即 任务实例) * 注:AsyncTask子类的实例必须在UI线程中创建 */ MyTask mTask = new MyTask(); /** * 步骤3:手动调用execute

    69810

    Android多线程:深入AsyncTask原理及源码分析

    前言 AsyncTask在Android开发中是十分常见的 今天,我将全面讲解AsyncTask的源码,希望你们会喜欢 Carson带你学多线程系列 基础汇总 Android多线程:基础知识汇总...类 & 方法介绍 在进行源码分析前,先介绍AsyncTask中的类 & 核心方法 3.1 类定义 AsyncTask类属于抽象类,即使用时需 实现子类 public abstract class AsyncTask...若有不同业务,需额外再写1个AsyncTask的子类 } 3.2 核心方法 AsyncTask 核心 & 常用的方法如下: 方法执行顺序如下 4....子类 & 根据需求实现核心方法 创建 AsyncTask子类的实例对象(即 任务实例) 手动调用execute(()从而执行异步线程任务 具体介绍如下 /** * 步骤1:创建AsyncTask子类...子类的实例对象(即 任务实例) * 注:AsyncTask子类的实例必须在UI线程中创建 */ MyTask mTask = new MyTask(); /** * 步骤3:手动调用execute

    28820

    Android 学习笔记思考篇

    但是,当我们写的程序越来越多时,当我们对 Android 应用开发越来越了解时,我们发现它并不完美,甚至有些简陋: Service 从字面上理解就是后台服务,一个看不见的服务不应该运行在后台吗?...不应该运行在独立的进程中吗?就算运行在主进程中那不应该运行在后台线程中吗? 文档中确实提醒过不要在主线程中进行耗时操作,那为什么在主线程中读写文件没有问题?甚至连警告都没有?...Thread[AsyncTask #3,5,main] 17:26:33.434 E/task: task-4: doInBackground Thread[AsyncTask #2,5,main]...既然 AsyncTask 是为了方便主线程执行异步任务的,那我们怎么避免 AsyncTask 在其他线程中创建和执行呢? 我们再来看一下网络请求,Android 有网络请求的 API 吗?...(或者说是 SDK)打了个补丁,还给它取了个名字,叫 Jetpack: Jetpack is a suite of libraries, tools, and guidance to help developers

    60510

    【Android 异步操作】AsyncTask 异步任务 ( 参数简介 | 方法简介 | 使用方法 | AsyncTask 源码分析 )

    、AsyncTask 参数简介 ---- AsyncTask 泛型类型 : 异步任务开始时 , execute() 方法传入的参数类型 , 也是 doInBackground...方法简介 ---- AsyncTask 常用方法解析 : doInBackground() : 核心方法 , 执行异步任务 , 该方法在 子线程 中执行 ; onPreExecute() : 在 doInBackground...() 创建后只能执行一次 自定义 AsyncTask 异步任务 : package kim.hsl.aa; import android.os.AsyncTask; /** * AsyncTask...getMainHandler() : new Handler(callbackLooper); // 创建工作任务 , 该类是 Callable 接口的子类 // 实际的...的 doInBackground() 方法的输入参数类型 * Result 是返回值类型 , 也是 AsyncTask 的 doInBackground() 方法的执行完毕的返回值类型 */

    73700

    Android开发高级进阶——多线程(实现简单下载器)

    每个Android应用在被启动时都会创建一个线程,这个线程称为主线程或UI线程,Android应用的所有操作都会运行在这个线程中。...主线程(UI线程):程序运行时被创建的线程。 工作线程:自己创建的线程。...使用AsyncTask的步骤: 创建AsyncTask的子类,并为三个泛型参数指定类型。如果某个泛型参数不需要指定类型,则可将它指定为void。...调用AsyncTask子类的实例的execute(Params... params)开始执行耗时任务。 这里通过实现一个简单的下载器来学习AsyncTask。...:color="#000000" android:width="0.7dp"/> 界面写完了,实现下载代码,根据上面的步骤,第一步是实现AsyncTask的子类,代码如下

    91920

    Android AsyncTask完全解析,带你从源码的角度彻底理解

    AsyncTask很早就出现在Android的API里了,所以我相信大多数朋友对它的用法都已经非常熟悉。...AsyncTask的基本用法 首先来看一下AsyncTask的基本用法,由于AsyncTask是一个抽象类,所以如果我们想使用它,就必须要创建一个子类去继承它。...2. doInBackground(Params...) 这个方法中的所有代码都会在子线程中运行,我们应该在这里去处理所有的耗时任务。...Android照片墙应用实现,再多的图片也不怕崩溃 这篇文章中例子的运行结果也证实了这个结论。...不过你可能还不知道,在Android 3.0之前是并没有SerialExecutor这个类的,那个时候是直接在AsyncTask中构建了一个sExecutor常量,并对线程池总大小,同一时刻能够运行的线程数做了规定

    83450
    领券