《第一行代码-Android》学习笔记(十七)

来源:互联网 发布:知乎 德昌路 编辑:程序博客网 时间:2024/06/05 02:21

1.服务是什么:服务是android中实现程序后台运行的解决方案,非常适合用于去执行那些不需要和用户交互而且还要求长期运行的任务。这样即使程序被切换到了后台,或者用户打开另一个程序,服务仍然能够保持正常运行。

 

2.注意点:

a) 服务并不是运行在一个独立的进程当中的,而是依赖于创建服务时所在的应用程序进程。当某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停止运行。

b) 不能被服务的后台迷惑,服务并不会开启线程,它里面所有的代码默认是运行在主线程当中的。也就是说,我们对于一些耗时的操作,需要自己手动创建线程来执行具体的任务。否则可能会出现主线程阻塞的情况。

 

3.android多线程编程:同java中一样,需要用到ThreadRunnable这两个类

a) android不允许在子线程中更新ui,因为和大多数GUI库一样,AndroidUI也是线程不安全的。

 

4.解析异步消息处理机制:

a) Android中的异步消息处理主要由四个部分组成:

i. MessageMessage用于线程之间传递消息,它可以带少量的信息;

ii. Handler:就是处理者的意思,主要用于处理和发送Message

iii. MessageQueue:消息队列的意思,主要用于存放handle发送的Message,每个线程只会有一个MessageQueue

iv. LooperLooper是每个线程的MessageQueue管家,调用Looperloop()方法之后,就会进入到一个无限的循环,然后每当MessageQueue中发现一条消息,就会传递到handlerhandleMessage()方法中,同样,每个线程只有一个Looper对象。

 

5.AsyncTask

a) AsyncTask是一个抽象类,必须通过继承它的方式使用它。

i. 继承时会要求制定三个泛型参数:

1. Params:在执行AsyncTask时需要传入的参数,用于在后台任务中使用;

2. Progress:后台任务执行时,如果要在界面上显示当前进度,则这个泛型作为进度单位;

3. Result:当任务执行完毕,如果需要对结果进行返回,则使用这里制定的泛型作为返回类型。

b) AsyncTask几个经常用到的方法:

i. onPreExecute():此方法在后台任务开始之前调用,用于进行一些界面上的初始化操作,比如显示一个进度条对话框;

ii. doInBackgroundParams...):这个方法里面的所有代码都只会在子线程中运行,耗时的任务在这里面进行。这里不能进行UI更新,如果要更新进度,需要调用publishProgressProgress...)方法完成;

iii. onProgressUpdateProgress...):在后台任务中调用了publishProgressProgress...)之后,就可以在这里进行进度界面更新;

iv. onPostExecuteResult):后台任务执行完毕之后,并通过return语句进行返回时,会很快地懊恼用这个方法,这里可以利用返回的数据进行一些ui操作,比如关闭进度条对话框等。

0 0
原创粉丝点击