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

Android 学习笔记思考篇

异步 Android 中的异步操作基本都是使用 Java 语言内置的,唯一的简单封装的异步类 AsyncTask 有几个主要回调,我们可以通过这些回调指定那些代码在异步任务开始之前执行,哪些代码在异步任务中执行...我们发现任务确实并行执行了,但是我们统计的计算次数却不是一百万次(9928698)了,出现了错误,我们这里不讨论这个错误出现的原因和怎么避免,我们更关心的是我们使用的 API 是不是符合我们正常的思维习惯...既然 AsyncTask 是为了方便主线程执行异步任务的,那我们怎么避免 AsyncTask 在其他线程中创建和执行呢? 我们再来看一下网络请求,Android 有网络请求的 API 吗?...,就是一个文本控件 3 秒后显示一个新的文本,但是在 Android 中却是一个 “错误” 的用例,对于新手来说很容易写出上面的代码,它们可以正常编译运行且大部分情况下功能良好,如果像上面一样仅仅设置文本而不是显示对话框甚至不会出现崩溃...Google 难道没有想过用新的操作系统替代 Android 吗?

60510

Android中AsyncTask的使用

Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时...5.onPostExecute(Result result),当后台操作结束时,此方法将会被调用,计算结果将做为参数传递到此方法中,直接将结果显示到UI组件上。...在使用的时候,有几点需要格外注意: 1.异步任务的实例必须在UI线程中创建。 2.execute(Params... params)方法必须在UI线程中调用。...下面就向大家详细介绍一下AsyncTask的执行原理。 我们先看一下AsyncTask的大纲视图: ?...下面是mWorker和mFuture实例在AsyncTask中的体现: private final WorkerRunnable mWorker; private final

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

    译文:Android中糟糕的AsyncTask

    生命周期 关于AsyncTask存在一个这样广泛的误解,很多人认为一个在Activity中的AsyncTask会随着Activity的销毁而销毁。然后事实并非如此。...如果你调用了AsyncTask的cancel(false),doInBackground()仍然会执行到方法结束,只是不会去调用onPostExecute()方法。...当Activity销毁并创新创建后,还在运行的AsyncTask会持有一个Activity的非法引用即之前的Activity实例。导致onPostExecute()没有任何作用。...从1.6到2.3(Gingerbread) 后来Android团队决定让AsyncTask并行来解决1.6之前引起的问题,这个问题是解决了,新的问题又出现了。很多开发者实际上依赖于顺序执行的行为。...推荐的一种进行异步操作的技术就是使用Loaders。这个方法从Android 3.0 (Honeycomb)开始引入,在android支持包中也有包含。

    61610

    AsyncTask 相关问题

    由于静态成员会在 加载类的时候进行初始化,因此这就变相要求 AsyncTask 的类必须在主线 程中加载,否则同一个进程中的 AsyncTask 都将无法正常工作。...在 1.6 之前,AsyncTask 是串行执行任务的,1.6 的时候 AsyncTask 开始采用线程池里处理并行任务,但是从 3.0 开始,为了避免 AsyncTask 所带来的并发错误,AsyncTask...线程池是由 AsyncTask 来处理的,线程池允许 tasks 并行运行,需要注意的是并发情况下数据的一致性问题,新数据可能会被老数据覆盖掉。...AsyncTask生命周期问题 一个在 Activity 中创建的 AsyncTask 不会随着 Activity 的销毁而销毁。...所带来的并发 错误,又采用一个线程来串行执行任务。

    59000

    Android 多线程的几种方式

    ()的返回值类型,和onPostExecute()的参数类型 注意点 AsyncTask使用过程中需要注意的地方不少: 1) 由于Handler需要和主线程交互,而Handler又是内置于AsnycTask...中的,所以,AsyncTask的创建必须在主线程。...2) AsyncTask的doInBackground(mParams)方法执行异步任务运行在子线程中,其他方法运行在主线程中,可以操作UI组件。...当一个新的Activity被重新创建之后,就又重新启动了一个新的任务去请求网络,这样之前的一个异步任务不经意间就泄露了,假设你还在onPostExecute写了一些其他逻辑,这个时候就会发生意想不到异常...问题产生的根源在于Activity销毁重新创建的过程中AsyncTask和之前的Activity失联,最终导致一些问题。

    82220

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

    () : 调用 publishProgress() 回调的方法 , 主线程 中执行 , 可更新 UI 界面 ; onPostExecute() : doInBackground() 执行完毕后再执行的方法...构造函数源码解析 ---- AsyncTask 构造函数作用 : 创建一个新的异步任务 , 该构造函数必须在 UI 主线程调用 ; 构造函数中做了三件事 : 获取 Handler : 该 Handler...对象中的 run() 方法 , 但是方法执行的结果我们是不知道的 ; 而在 AsyncTask 异步任务中 , 执行 doInBackground() 方法 , 该方法也是在子线程中执行的 ,...Handler 发送 MESSAGE_POST_RESULT 消息 , 触发 AsyncTask 异步任务的 onPostExecute() 方法 五、AsyncTask 构造函数相关源码注释 --...-- public abstract class AsyncTask { // ... /** * 创建一个新的异步任务 .

    73600

    Android多线程-AsyncTaskyi(一)

    (4)onPostExecute(Result), 在主线程中执行,在doInBackground 执行完成后,onPostExecute 方法将被UI线程调用,doInBackground 方法的返回值将作为此方法的参数传递到...(5)onCancelled(),在主线程中执行,当异步任务被取消时,该方法将被调用,要注意的是这个时onPostExecute将不会被执行。...(1) AsyncTask的实例必须在主线程(UI线程)中创建 ,execute方法也必须在主线程中调用 (2) 不要在程序中直接的调用onPreExecute(), onPostExecute(Result...,而在android 3.0之后 ,为了避免AsyncTask处理任务时所带来的并发错误,AsyncTask则采用了单线程串行执行任务。...到此AsyncTask在不同android版本中的差异也分析的差不多了。

    63520

    AsyncTask? AsyncTask串行and并行?

    因为onProgresssUpdate实在主线程中执行的,只有主线程才可以更新UI哦。当然执行doInBackground时你需要返回一个结果集。该结果集最终在onPostExecute中获取。...同样的原因,onPostExecute是在主线程中运行的;(线程总是切换来切换去,真烦是不是?)...onProgresssUpdate:上面讲过了,这里就略过了; onPostExecute:同样onPostExecute也是; onCancelled:在主线程中执行。当异步任务被取消时被毁掉。...; execute方法必须在主线程中调用; onPreExecute、onPostExecute、doInBackground、onProgressUpdate 四个方法不能在程序中直接调用; 一个AsyncTask...(final Runnable r)传如了一个runnable,然后这里mTasks.offer(new Runnable() 又创建一个新的runnable入队列。

    1K20

    安卓开发_浅谈AsyncTask

    但是在子线程中无法去操作主线程(UI 线程),在子线程中操作UI线程会出现错误。因此android提供了一个类Handler来在子线程中来更新UI线程,用发消息的机制更新UI界面,呈现给用户。...三、构建AsyncTask子类的回调方法   1..execute(Params... params),执行一个异步任务,需要我们在代码中调用此方法,触发异步任务的执行。   ...3、dolnBackground:必须重写,异步执行后台线程将要完成的任务   4、onPostExecute(),当dolnBackground()完成后,系统自动调用onPostExecute()方法...()中手动执行,更新任务的进度。...四、几条必须遵守的准则:   在使用的时候,有几点需要格外注意:   1.异步任务的实例必须在UI线程中创建。

    1.7K70

    2016级移动应用开发在线测试11-线程

    以下对Android系统中的多线程描述错误的是() 您的回答为:ANR全称Application Not Responding,意思就是程序未响应,常见于两种情况:应用在15秒内未响应用户的输入事件(...下面对Android系统消息和线程机制描述错误的是() 您的回答为:在一个Activity中无法创建多个组件或者子线程。   ...下面关于AsyncTask类描述错误的是() http://android.xsoftlab.net/reference/android/os/AsyncTask.html 您的回答为: 可以手动调用...()一个AsyncTask是由3个泛型类型Params, Progress和Result的参数和4个方法PreExecute, dolnBackground, onProgressUpdate及onPostExecute...()AsyncTask类的实例必须在UI线程中创建,即在主线程中创建;execute(Params...)方法必须在UI线程中调用;AyncTask方法只能被执行一次,若多次调用将会抛出异常 8.

    70610

    Android Handler机制13之AsyncTask源码解析

    用法:AsyncTask必须由子类实现后才能使用,它的子类至少重写doInBackground()这个方法,并且通常也会重写onPostExecute()这个方法 下面是一个继承AsyncTask类的一个子类的例子...从android 3.0开始,每个任务都是执行在一个独立的线程上,这样可以避免一些并行执行引起的常见的应用程序错误。...在Android HONEYCOMB开始,又变回了在单个线程上执行,这样可以避免并行执行的错误。...的call()方法) PS:mFuture和mWorker都是在AsyncTask的构造方法中初始化过的。...六、AsyncTask核心流程 其实在上面讲解过程中,我基本上已经把整体流程讲解过了,我这里补上一张图,比较全面的阐述了AsyncTask的执行流程如下: ?

    81310

    Android的UI设计与后台线程交互

    b)时,将会发生意想不到的错误,这种错误是非常难跟踪和调试的。...,非常重要的一点是:AsyncTask必须在UI线程中实例化它,并且只能执行一次。...以下是AsyncTask的简要使用方法: ◆您可以指定三个参数类型,泛型参数,进度值(执行过程中返回的值)和最终值(执行完返回的值)。...返回的值()发送到onPostExecute() ◆您可以在执行doInBackground()时调用publishProgress()然后在UI组程中执行onProgressUpdate()。...◆您可以从任何线程随时取消任务 不管你是否使用AsyncTask,时刻牢记单一线程模型的两条规则: 1、不要锁住用户界面。 2、确保只在UI线程中访问Android用户界面工具包中的组件。

    1K50

    Android精通之AsyncTask与ListView讲解

    标题图 AsyncTask 了解AsyncTask异步,需要了解一下异步任务(多线程),什么是线程,可以这么说线程好比边吃饭边看电视,AsyncTask是为了方便后台线程中操作更新UI,本质为Handler...学习AsyncTask需要知道它的参数,它要实现的方法onPreExcecute(),onPostExecute(),后台线程操作doInBackground...(Boolean aBoolean){ super.onPostExecute(aBoolean); //执行完,执行结果 处理 } //当我们的进度在变化的时候 @Override protected...//解释一下这里的Boolean是由这个定义的 public class DownloadAsyncTask extends AsyncTask{ }...(Boolean aBoolean) { super.onPostExecute(aBoolean); //也是在主线程中,执行结果 处理 //处理UI } 最后进度变化 //当我们的进度在变化的时候

    48930

    android异步任务asyntask详解

    在Android中实现异步任务机制有两种方式,Handler和AsyncTask。...Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时...5.onPostExecute(Result result),当后台操作结束时,此方法将会被调用,计算结果将做为参数传递到此方法中,直接将结果显示到UI组件上。...在使用的时候,有几点需要格外注意: 1.异步任务的实例必须在UI线程中创建。 2.execute(Params... params)方法必须在UI线程中调用。...下面是mWorker和mFuture实例在AsyncTask中的体现: private final WorkerRunnable mWorker;   private

    1.1K80

    如何将天气预报查询API集成到手机上

    引言随着智能手机的普及,天气预报应用成为了我们日常生活中不可或缺的一部分。本文将指导你如何将天气预报查询API集成到手机上,无论是通过原生应用开发还是跨平台解决方案,都可以实现这一功能。...创建新项目在Android Studio中创建一个新的Android项目。...android:name="android.permission.INTERNET" />步骤2:编写API请求代码创建一个新的Java类,用于发送网络请求并处理响应:public class WeatherApiService...方法中,我们解析JSON并更新UI:// onPostExecute方法是AsyncTask执行完毕后的回调方法,用于在UI线程中更新UI@Overrideprotected void onPostExecute...(String weatherJson) { super.onPostExecute(weatherJson); // 调用父类的onPostExecute方法 if (weatherJson

    14710

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

    前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 继承Thread类 实现Runnable接口 Handler AsyncTask HandlerThread 今天,我将献上一份...{ ... } // 类中参数为3种泛型类型 // 整体作用:控制AsyncTask子类执行线程任务时各个阶段的返回类型 // 具体说明: // a....Params:开始异步任务执行时传入的参数类型,对应excute()中传递的参数 // b. Progress:异步任务执行过程中,返回下载进度值的类型 // c....执行任务中,系统会自动调用AsyncTask的一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute()...执行任务中,系统会自动调用AsyncTask的一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute()

    83320

    Android十八章:ASYNCTASK分析一波

    我们在初学Android都用过AsyncTask 一个很方便用来请求网络改变UI控件的类。面试官不多不少也会问到AsyncTask的内容,下面来分析一下这个类内部的逻辑。...的参数)通常是请求的url Progress代表进度类型(onProgressUpdate的参数)通常是Integer Result代表结果返回类型(onPostExecute的参数),如果asynctask...... params) 在线程池执行的异步任务,在此方法内调用publishProgress 传入int进度值来更新进度,返回结果给onPostExecute,这里的省略号是可以传入多个相同类型的参数。...传入参数为doInBackground的返回值. ps: 当doInBackground的线程被取消就会回调给onCancelled这个方法,此方法被调用onPostExecute就不会调用了。...message到sHandle来执行finish task还是更新进度条,这里的finish有2种情况分别是调用onCancelled 和onPostexecute. public AsyncTask(

    41230
    领券