Android AsyncTask学习笔记

1,AsyncTask运行机制

一般情况下分为四部走:

1)onPreExecute,运行在UI线程,一般作为AsyncTask开始前的界面初始化;

2)doInBackground,运行在非主线程空间,任务的后台处理过程将在这里完成,调用publishProgress调用onProgress,运行结束后调用onPostExecute;

3)onProgressUpdate,运行在UI线程,一般作为ProgressBar的更新

4)onPostExecute,运行在UI线程,当任务将要结束时运行。

2,AsyncTask的启动

1)AsyncTask的实例创建和启动都必须在主线程里执行,在主线程里调用taskInstance.execute(Params...params),如果是在非主线程里,那么onPreExecute将不能和主线程交互,就失去了AsyncTask的存在意义。

2)根据版本不同,AsyncTask决定doInBackground是运行在单线程或者是线程池里。

3)在启动过程中,如果同一个实例已经运行完或者正在运行,将会抛出IllegalStateException的异常,所以一个task实例只能执行一次。

4)在运行过程中,调用cancel方法,可以终止任务


以上所说的都是在使用AsyncTask时,需要掌握的基本知识点,下面来看一下AsyncTask的内部运行机制。

1,内部状态如下说是,默认开始状态为PENDING,在每个实例运行execute时,将会判断是否为PENDING,若否将会抛出异常    

public enum Status {
        /**
         * Indicates that the task has not been executed yet.
         */
        PENDING,
        /**
         * Indicates that the task is running.
         */
        RUNNING,
        /**
         * Indicates that {@link AsyncTask#onPostExecute} has finished.
         */
        FINISHED,
    }

2,在初始化过程中,创建Handler(所以AsyncTask必须在主线程里创建,否则onPostExecute、onProgressUpdate将不能在UI线程里执行),handler将handle两种消息

MESSAGE_POST_PROGRESS和MESSAGE_POST_RESULT,分别将会调用onPostExecute(或者onCancelled)和onProgressUpdate。

3,内部的多线程机制是使用FutureTask完成,FutureTask:

  1. 构造方法摘要  
  2. FutureTask(Callable<V> callable)   
  3.           创建一个 FutureTask,一旦运行就执行给定的 Callable。  
  4.   
  5. FutureTask(Runnable runnable, V result)   
  6.           创建一个 FutureTask,一旦运行就执行给定的 Runnable,并安排成功完成时 get 返回给定的结果 。  
  7. 参数:  
  8. runnable - 可运行的任务。  
  9. result - 成功完成时要返回的结果。  
  10. 如果不需要特定的结果,则考虑使用下列形式的构造:Future<?> f = new FutureTask<Object>(runnable, null)  
在AsyncTask内部使用的是Callable构造FutureTask。Callable和FutureTask的结合本身是异步线程并返回结果的一套很好的方案。




资源下载链接为: https://pan.quark.cn/s/5c50e6120579 在Android移动应用开发中,定位功能扮演着极为关键的角色,尤其是在提供导航、本地搜索等服务时,它能够帮助应用获取用户的位置信息。以“baiduGPS.rar”为例,这是一个基于百度地图API实现定位功能的示例项目,旨在展示如何在Android应用中集成百度地图的GPS定位服务。以下是对该技术的详细阐述。 百度地图API简介 百度地图API是由百度提供的一系列开放接口,开发者可以利用这些接口将百度地图的功能集成到自己的应用中,涵盖地图展示、定位、路径规划等多个方面。借助它,开发者能够开发出满足不同业务需求的定制化地图应用。 Android定位方式 Android系统支持多种定位方式,包括GPS(全球定位系统)和网络定位(通过Wi-Fi及移动网络)。开发者可以根据应用的具体需求选择合适的定位方法。在本示例中,主要采用GPS实现高精度定位。 权限声明 在Android应用中使用定位功能前,必须在Manifest.xml文件中声明相关权限。例如,添加<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />,以获取用户的精确位置信息。 百度地图SDK初始化 集成百度地图API时,需要在应用启动时初始化地图SDK。通常在Application类或Activity的onCreate()方法中调用BMapManager.init(),并设置回调监听器以处理初始化结果。 MapView的创建 在布局文件中添加MapView组件,它是地图显示的基础。通过设置其属性(如mapType、zoomLevel等),可以控制地图的显示效果。 定位服务的管理 使用百度地图API的LocationClient类来管理定位服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值