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

Android 学习笔记思考篇

不应该运行在独立的进程中吗?就算运行在主进程中那不应该运行在后台线程中吗? 文档中确实提醒过不要在主线程中进行耗时操作,那为什么在主线程中读写文件没有问题?甚至连警告都没有?...异步 Android 中的异步操作基本都是使用 Java 语言内置的,唯一的简单封装的异步类 AsyncTask 有几个主要回调,我们可以通过这些回调指定那些代码在异步任务开始之前执行,哪些代码在异步任务中执行...这个设定真的是太难以接受了 作者在封装 AsyncTask 这个类时多个任务是在一个后台线程中串行执行的,后来才意识到这样效率太低了就从 Android 1.6(API Level 4)开始改成并行执行了...在 Jetpack 中 Google 提供了一些工具可以让开发者不再很容易写出内存泄漏和卡顿的代码了,也就是说,开发者只要使用 Jetpack 就基本可以写出不卡顿的高质量应用了 Jetpack 中确实提供了很多很基本很有趣甚至很优秀的实现...Java 文件离的太远了,XML 文件中也可能包含简单的业务代码,所以一个业务逻辑可能需要同时阅读这些文件才能知道详细的信息,代码可读性可能会降低,这在一些开发者看来是无法接受的 下一个十年 Android

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

    Android查缺补漏(线程篇)-- AsyncTask的使用及原理详细分析

    : Parmas:参数类型 Progress:异步任务的执行进度类型 Result:异步任务执行完毕后返回结果的类型 在使用AsyncTask执行异步任务需要创建一个类,让这个类继承AsyncTask,...执行AsyncTask是需要在主线程中调用: new MyAsyncTask().execute(); 在使用AsyncTask时有一些限制我们要注意: AsyncTask类必须在主线程中加载。...这是因为在AsyncTask中存在这个一个静态类型的Handler对象成员,在AsyncTask被加载时,该静态类型的Handler对象就会被初始化,所以这就要求了首次访问AsyncTask要发送在主线程中...,而由于静态成员会在类加载时被初始化,这就又要求了AsyncTask类必须在主线程中加载,否则该进程中的AsyncTask任务都无法正常工作。...前面所说的这个FutureTask任务是在AsyncTask初始化时被封装好的,在该任务中调用了doInBackground方法用于异步执行我们添加的耗时任务,doInBackground方法执行完毕会通过

    56530

    asynctask使用_androidstudiohelloworld教程

    Android AsyncTask 详解 内容划分 AsyncTask简介 简单使用 繁杂部分和源码浅析 一些坑的地方 AsyncTask简介 AsyncTask enables proper and...该方法的参数类型就是上面设置的 Params ,也就是执行调用代码中execute里传递来的参数。在该方法内部可以调用publishProgress方法来传递当前的进度。...onPostExecute 在doInBackground方法执行完成后会执行该方法,同样运行在UI Thread。...而传入的参数就是doInBackground方法的返回值,该类型由上文的Result指定。 繁杂部分和源码浅析 上面基本讲解了AsyncTask的使用方法了。...但是当你的doInBackground方法中执行一个循环或者一个IO流读写任务,即使你传入了true,改方法也无法取消这个任务的执行。

    33420

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

    方法简介 ---- AsyncTask 常用方法解析 : doInBackground() : 核心方法 , 执行异步任务 , 该方法在 子线程 中执行 ; onPreExecute() : 在 doInBackground...AsyncTask 使用注意点 : UI 线程创建 UI 线程调用执行 execute() 创建后只能执行一次 自定义 AsyncTask 异步任务 : package kim.hsl.aa; import..., 但是方法执行的结果我们是不知道的 ; 而在 AsyncTask 异步任务中 , 执行 doInBackground() 方法 , 该方法也是在子线程中执行的 , 可以得到该方法执行的结果 ,...这个执行结果是靠 Future 接口得到的 ; 在 WorkerRunnable 中的 call() 方法中执行了 doInBackground() 方法 ; 在 FutureTask 中的 done...() 方法中 : 执行 postResultIfNotInvoked 方法 : 如果没有被调用 , 那么传递结果 ; 执行 postResult() 方法 : 在该方法中使用主线程 Handler

    73600

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

    执行任务中,系统会自动调用AsyncTask的一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute()...执行任务中,系统会自动调用AsyncTask的一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute()...使用时的注意点 在使用AsyncTask时有一些问题需要注意的: 7.1 关于 生命周期 结论 AsyncTask不与任何组件绑定生命周期 使用建议 在Activity 或 Fragment中使用...的非静态内部类,当Activity需销毁时,会因AsyncTask保留对Activity的引用 而导致Activity无法被回收,最终引起内存泄露 使用建议 AsyncTask应被声明为Activity...引用已无效,故复写的onPostExecute()将不生效,即无法更新UI操作 使用建议 在Activity恢复时的对应方法 重启 任务线程 8.

    83320

    Android开发笔记(四十九)异步任务处理AsyncTask

    该方法运行于分线程,所以不能操作UI,其他方法都能操作UI onPreExecute : 在doInBackground执行之前调用 onProgressUpdate : doInBackground...方法中调用publishProgress时会触发该方法,通常用于处理过程中刷新进度条 onPostExecute : 在doInBackground执行完毕时调用,通常用于处理完毕后刷新展示页面 onCancelled...: doInBackground方法中调用cancel时会触发该方法 下面是可直接调用的方法: execute : 开始执行异步处理任务。...该方法只能在doInBackground方法中调用,调用后会触发onProgressUpdate方法。 cancel : 取消任务。...注意,只有水平进度条才能设置当前进度,圆圈进度无法设置当前进度 样式设置方式为,在xml布局文件的ProgressBar增加如下的style属性: style="?

    98220

    AsyncTask解析

    doInBackground(Params...) 这个方法在 子线程中运行,应该在这里处理所有的耗时任务。 任务执行结束,可以通过 return语句来返回任务执行的结果。...当在后台任务中调用 publishProgress(Progress…)后,这个方法就会马上被调用,方法中携带的参数是后台任务传过来的,该方法在 主线程运行,所以可以进行UI更新。...在mWorker的 call()方法中,会调用 doInBackground()执行耗时任务,并将执行结果通过 postResult(result)传递给内部Handler跳转到主线程中。...如果想使用并行执行任务,可以跳过 SerialExecutor类,使用 executeOnExecutor()来执行任务。 AsyncTask使用不当的后果 1....如果Activity已经被销毁,AsyncTask的后台线程还在执行,它将继续在内存里保留这个引用,导致Activity无法被回收,引起内存泄露。

    59010

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

    Result:异步任务执行完成后,返回的结果类型,与doInBackground()的返回值类型保持一致 // 注: // a. 使用时并不是所有类型都被使用 // b....执行任务中,系统会自动调用AsyncTask的一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute()...使用时的注意点 在使用AsyncTask时有一些问题需要注意的: 7.1 关于 生命周期 结论 AsyncTask不与任何组件绑定生命周期 使用建议 在Activity 或 Fragment中使用...的非静态内部类,当Activity需销毁时,会因AsyncTask保留对Activity的引用 而导致Activity无法被回收,最终引起内存泄露 使用建议 AsyncTask应被声明为Activity...引用已无效,故复写的onPostExecute()将不生效,即无法更新UI操作 使用建议 在Activity恢复时的对应方法 重启 任务线程 ---- 8.

    1.3K30

    Android查缺补漏(线程篇)-- AsyncTask的使用及原理详细分析

    : Parmas:参数类型 Progress:异步任务的执行进度类型 Result:异步任务执行完毕后返回结果的类型 在使用AsyncTask执行异步任务需要创建一个类,让这个类继承AsyncTask,...执行AsyncTask是需要在主线程中调用: new MyAsyncTask().execute(); 在使用AsyncTask时有一些限制我们要注意: AsyncTask类必须在主线程中加载。...这是因为在AsyncTask中存在这个一个静态类型的Handler对象成员,在AsyncTask被加载时,该静态类型的Handler对象就会被初始化,所以这就要求了首次访问AsyncTask要发送在主线程中...,而由于静态成员会在类加载时被初始化,这就又要求了AsyncTask类必须在主线程中加载,否则该进程中的AsyncTask任务都无法正常工作。...前面所说的这个FutureTask任务是在AsyncTask初始化时被封装好的,在该任务中调用了doInBackground方法用于异步执行我们添加的耗时任务,doInBackground方法执行完毕会通过

    64220

    Android查缺补漏(线程篇)-- AsyncTask的使用及原理详细分析

    : Parmas:参数类型 Progress:异步任务的执行进度类型 Result:异步任务执行完毕后返回结果的类型 在使用AsyncTask执行异步任务需要创建一个类,让这个类继承AsyncTask,...执行AsyncTask是需要在主线程中调用: new MyAsyncTask().execute(); 在使用AsyncTask时有一些限制我们要注意: AsyncTask类必须在主线程中加载。...这是因为在AsyncTask中存在这个一个静态类型的Handler对象成员,在AsyncTask被加载时,该静态类型的Handler对象就会被初始化,所以这就要求了首次访问AsyncTask要发送在主线程中...,而由于静态成员会在类加载时被初始化,这就又要求了AsyncTask类必须在主线程中加载,否则该进程中的AsyncTask任务都无法正常工作。...前面所说的这个FutureTask任务是在AsyncTask初始化时被封装好的,在该任务中调用了doInBackground方法用于异步执行我们添加的耗时任务,doInBackground方法执行完毕会通过

    1.1K70

    译文:Android中糟糕的AsyncTask

    生命周期 关于AsyncTask存在一个这样广泛的误解,很多人认为一个在Activity中的AsyncTask会随着Activity的销毁而销毁。然后事实并非如此。...内存泄露 还有一种常见的情况就是,在Activity中使用非静态匿名内部AsyncTask类,由于Java内部类的特点,AsyncTask内部类会持有外部类的隐式引用。...的引用,导致Activity对象无法回收,进而产生内存泄露。...在1.6(Donut)之前: 在第一版的AsyncTask,任务是串行调度。一个任务执行完成另一个才能执行。由于串行执行任务,使用多个AsyncTask可能会带来有些问题。...推荐的一种进行异步操作的技术就是使用Loaders。这个方法从Android 3.0 (Honeycomb)开始引入,在android支持包中也有包含。

    61610

    Android多线程-AsyncTaskyi(一)

    AsyncTask的常规使用分析以及案例实现 AsyncTask在不同android版本的下的差异 AsyncTask的工作原理流程 一、AsyncTask的常规使用分析以及案例实现 AsyncTask...(4)onPostExecute(Result), 在主线程中执行,在doInBackground 执行完成后,onPostExecute 方法将被UI线程调用,doInBackground 方法的返回值将作为此方法的参数传递到...基本使用到此,然后再来聊聊AsyncTask在不同android版本中的差异。...其实以前我也只是知道这回事而已,不过最近在SDK开发中遇到了AsyncTask的开发问题,产生问题的场景是这样的,我们团队在SDK中使用了AsyncTask作为网络请求类,因为现在大部分系统都是在Android...,他们的应用网络加载速度变得十分慢,后来他们一直没排查出啥问题,我们这边也在懵逼中……直到我们双方都找到一个点,那就是publisher的应用和我们的SDK使用的都是AsyncTask作为网络请求,那么问题就来

    63520

    关于Android中工作者线程的思考

    摘要 在Android开发过程中,我们经常使用工作者线程,如AsyncTask和线程池。...在Android中,我们或多或少使用了工作者线程,比如Thread,AsyncTask,HandlerThread,甚至是自己创建的线程池,使用工作者线程我们可以将耗时的操作从主线程中移走。...因而,在Android中使用工作者线程显得势在必行,如一开始提到那样,在Android中工作者线程有很多,接下来我们将围绕AsyncTask,HandlerThread等深入研究。...AsyncTask AsyncTask是Android框架提供给开发者的一个辅助类,使用该类我们可以轻松的处理异步线程与主线程的交互,由于其便捷性,在Android工程中,AsyncTask被广泛使用。...以一个简单的场景为例: 在Activity中,通常我们这样使用AsyncTask 1 2 3 4 5 6 7 8 9 //In Activity new AsyncTask<String, Void,

    75620

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

    不过为了更加方便我们在子线程中更新UI元素,Android从1.5版本就引入了一个AsyncTask类,使用它就可以非常灵活方便地从子线程切换到UI线程,我们本篇文章的主角也就正是它了。...在继承时我们可以为AsyncTask类指定三个泛型参数,这三个参数的用途如下: 1. Params 在执行AsyncTask时需要传入的参数,可用于在后台任务中使用。 2....正因如此,在doInBackground()方法中调用publishProgress()方法才可以从子线程切换到UI线程,从而完成对UI元素的更新操作。...其实SerialExecutor也是AsyncTask在3.0版本以后做了最主要的修改的地方,它在AsyncTask中是以常量的形式被使用的,因此在整个应用程序中的所有AsyncTask实例都会共用同一个...因此在3.0版本中AsyncTask的改动还是挺大的,在3.0之前的AsyncTask可以同时有5个任务在执行,而3.0之后的AsyncTask同时只能有1个任务在执行。

    83450

    Android 多线程的几种方式

    ,也即是execute()的参数类型 和 doInBackground()的参数类型 第二个String代表处理过程中的参数类型,也就是doInBackground()执行过程中的产出参数类型,通过publishProgress...()的参数类型 注意点 AsyncTask使用过程中需要注意的地方不少: 1) 由于Handler需要和主线程交互,而Handler又是内置于AsnycTask中的,所以,AsyncTask的创建必须在主线程...2) AsyncTask的doInBackground(mParams)方法执行异步任务运行在子线程中,其他方法运行在主线程中,可以操作UI组件。...然后你可以在onCreate()或onRestoreInstanceState()方法中恢复。 但是,对于AsyncTask怎么办?...那么解决问题的思路也可以朝着这个方向发展 可以用下面的两种方式 事件总线(EventBus) ★★★ 使用方法参考Android中RxBus的使用 RxJava&RxAndroid ★★★★ //

    82220
    领券