服务
、 Anroid用于实现程序后台运行的解决方案
服务依赖于创建该服务的应用。
服务不会自动开启线程,所以为了防止线程堵塞,需要自己手动在服务内部创建子线程,
关于线程安全
1、线程安全:
指多个线程在执行同一段代码的时候采用加锁机制,使每次的执行结果和单线程执行的结果都是一样的,不存在执行程序时出现意外结果。
2、线程不安全:
是指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。
安卓的UI是线程不安全的,所以更新UI必须在主线程中进行。
为了达到在子线程中执行任务并根据其结果更新UI 需要使用Android的异步消息处理机制
Android的异步消息处理
1. Message: 用于携带信息
2. Handler: 发送和处理消息 需要进行UI操作时 实例化Message,设置Message的具体信息,
然后调用sendMessage发送该消息,最后在handleMessage中进行具体的UI操作
3. MessageQueue:消息队列,用于存放Handler发送的消息(每个线程只有一个)
4. Looper 取出并传递MessageQueue中的消息
AsyncTask(params,progress,result):
AsyncTask中的四个方法
1.onPreExecute() 用于初始化UI操作
2.doInBackgroud(params....)该方法中的所有代码在子线程运行,多用于处理耗时任务,
完成后return 结果。
若第三个参数为void ,则不返回。该方不可用于执行UI操作,若要反馈执行进度
可以调用publishProgress
3.onProgressUpdate(progress) 若后台调用了publishProgress则该方法会被调用,
可以利用后台传递的参数来进行UI更新。
4.onPostExecute(Result)
可以利用返回的数据进行一些UI操作,比如提醒任务执行结果、关闭进度条对话框等。
、 服务的基本用法
直接新建一个Service
Exported:表示是否允许其它程序调用该服务
Enabled: 表示该服务是否启动
服务类都继承自Service
onCreate()创建时调用
onStartCommand()每次启动时调用
onBind、onUnbind 服务与活动的绑定与解绑
前台的服务 可以以通知的形式显示
使用IntentService类可以自动开启和停止线程