Android Service(服务)详解·(一)相关知识点引入
2017-08-03 09:35
513 查看
原创作品,转载请注明出处^O^
Service是Android四大组件之一,它主要是去执行耗时操作(不需要与用户交互并且要长期运行的任务)。
Service不依赖于用户界面,但依赖于创建服务的应用进程,同时也不会自动开启线程,所以我们需要在服务内部手动创建线程,否则就可能会出现线程阻塞。
在具体讲解Service之前,我们先引入几个关于Android多线程的知识点:
多线程的作用就是避免在主线程做耗时操作而导致线程阻塞,从而影响用户体验。
1.继承Thread,重写run方法
2.实现Runnable接口
3.匿名类方式
4.切记不可在主线程更新UI
Android中的异步消息处理主要有4部分:
1.Message
Message是在线程之间传递的消息,它可以在内部携带少量信息,用于在不同线程之间交换数据。
2.Handler
Handler主要用于发送和处理消息。
3.MessageQueue
MessageQueue是消息队列的意思,主要用于存放所有通过Handler发送的消息。这部分消息会一直存在于消息队列中,等待处理。
4.Looper
Looper是每个线程中的MessageQueue的管家,调用Looper的loop()方法后,就会进入到一个无限循环中,每当MessageQueue中存在一条消息,就将它取出,传递到Handler的handleMessage()方法中。
整个流程如图所示(请忽略我清新脱俗的配图)
AsyncTask的实现原理也是基于异步消息处理机制
由于AsyncTask是一个抽象类,所以必须创建一个子类继承它。在继承时可以为AsyncTask类指定3个泛型参数:
Params 在执行AsyncTask时需要传入的参数,可用于后台任务。
Progress 后台任务执行时,可以使用这里指定的泛型作为进度单位
Result 任务执行完成时,可以使用这里指定的泛型作为返回值类型
现在创建完MyTask如果要使用还需要重写里面的方法,常用的有以下4个:
1.onPreExecute()
后台任务执行前调用,用于界面上的一些初始化操作。
2.doInBackground(Params...)
代码执行在子线程,处理耗时操作。返回类型根据AsyncTask类的第三个泛型参数决定(上文中提到的Result)。
不可进行UI操作,可通过publishProgress() 从而调用下一个方法onProgressUpdate()操作UI
3.onProgressUpdate(Progress...)
在这个方法中对UI进行操作
4.onPostExecute(Result)
后台任务执行完成时调用此方法
重写方法后变成这样
启动AsyncTask,只需要简单的一句
本篇文章就到这里,内容只是引入了多线程,异步消息处理,AsyncTask的概念和简单使用。
下篇文章会正式介绍Service的使用,并附Demo。
Service做为四大组件之一,很值得深入,所以本系列也会由浅入深,从会使用到最终了解其实现原理。
相关文章
Android Service(服务)详解·(二)Service基本用法
每星期至少一篇跟新本系列,感兴趣可以关注。
一起学习,一起进步。
个人公众号 Coder栈
Service是Android四大组件之一,它主要是去执行耗时操作(不需要与用户交互并且要长期运行的任务)。
Service不依赖于用户界面,但依赖于创建服务的应用进程,同时也不会自动开启线程,所以我们需要在服务内部手动创建线程,否则就可能会出现线程阻塞。
在具体讲解Service之前,我们先引入几个关于Android多线程的知识点:
1.Android多线程基本用法
多线程的作用就是避免在主线程做耗时操作而导致线程阻塞,从而影响用户体验。1.继承Thread,重写run方法
public class MyThread extends Thread { @Override public void run() { //具体实现代码 } } 调用 new MyThread().start();
2.实现Runnable接口
public class MyThread implements Runnable { @Override public void run() { //具体实现代码 } } 调用 MyThread myThread = new MyThread(); new Thread(myThread).start();
3.匿名类方式
new Thread(new Runnable() { @Override public void run() { //具体实体 } }).start();
4.切记不可在主线程更新UI
2.异步消息处理
Android中的异步消息处理主要有4部分:1.Message
Message是在线程之间传递的消息,它可以在内部携带少量信息,用于在不同线程之间交换数据。
2.Handler
Handler主要用于发送和处理消息。
3.MessageQueue
MessageQueue是消息队列的意思,主要用于存放所有通过Handler发送的消息。这部分消息会一直存在于消息队列中,等待处理。
4.Looper
Looper是每个线程中的MessageQueue的管家,调用Looper的loop()方法后,就会进入到一个无限循环中,每当MessageQueue中存在一条消息,就将它取出,传递到Handler的handleMessage()方法中。
整个流程如图所示(请忽略我清新脱俗的配图)
3.AsyncTask
AsyncTask的实现原理也是基于异步消息处理机制由于AsyncTask是一个抽象类,所以必须创建一个子类继承它。在继承时可以为AsyncTask类指定3个泛型参数:
Params 在执行AsyncTask时需要传入的参数,可用于后台任务。
Progress 后台任务执行时,可以使用这里指定的泛型作为进度单位
Result 任务执行完成时,可以使用这里指定的泛型作为返回值类型
public class MyTask extends AsyncTask<Void,Integer,Boolean>{ }
现在创建完MyTask如果要使用还需要重写里面的方法,常用的有以下4个:
1.onPreExecute()
后台任务执行前调用,用于界面上的一些初始化操作。
2.doInBackground(Params...)
代码执行在子线程,处理耗时操作。返回类型根据AsyncTask类的第三个泛型参数决定(上文中提到的Result)。
不可进行UI操作,可通过publishProgress() 从而调用下一个方法onProgressUpdate()操作UI
3.onProgressUpdate(Progress...)
在这个方法中对UI进行操作
4.onPostExecute(Result)
后台任务执行完成时调用此方法
重写方法后变成这样
public class MyTask extends AsyncTask<Void,Integer,Boolean>{ @Override protected void onPreExecute() { //显示对话框等UI操作 } @Override protected Boolean doInBackground(Void... voids) { //执行后台任务 //不可操作UI publishProgress(integer);//通过此方法调用onProgressUpdate return ture; } @Override protected void onProgressUpdate(Integer... values) { //获取后台执行进度 //可操作UI } @Override protected void onPostExecute(Boolean aBoolean) { //后台任务执行完成 //可操作UI } }
启动AsyncTask,只需要简单的一句
new MyAsyncTask().execute();
本篇文章就到这里,内容只是引入了多线程,异步消息处理,AsyncTask的概念和简单使用。
下篇文章会正式介绍Service的使用,并附Demo。
Service做为四大组件之一,很值得深入,所以本系列也会由浅入深,从会使用到最终了解其实现原理。
相关文章
Android Service(服务)详解·(二)Service基本用法
每星期至少一篇跟新本系列,感兴趣可以关注。
一起学习,一起进步。
个人公众号 Coder栈
相关文章推荐
- [Android] Service服务详解以及如何使service服务不被杀死
- Android中Service(服务)详解
- Android中Service(服务)详解
- Android中Service服务详解(一)
- Android中Service(服务)详解
- Android Service详解(七)---绑定服务BoundService详解之Messenger双向通信的实现
- Android中Service(服务)详解
- Android中Service(服务)详解
- Android服务Service详解(作用,生命周期,AIDL)系列文章--进一步封装绑定服务(私有化代理类)
- Android知识点<3> Service 相关
- Android中Service(服务)详解
- Android服务Service 详解_百度文库
- Android四大组件之Service(观第一行代码2随记)二.活动与服务间通信相关
- Android中Service(服务)详解
- Android中Service(服务)详解
- Android中Service(服务)详解
- Android Service(服务)详解·(二)Service基本用法
- Android中Service服务详解(一)
- Android中Service(服务)详解
- Android中的服务(service)详解(一)