第九章:服务

来源:互联网 发布:于建国 人工智能 编辑:程序博客网 时间:2024/05/11 03:12

服务:是Android中实现程序后台运行的解决方案。

Android线程的基本用法:

1.新建一个类继承自Thread

2.重写父类的run()方法

3.new出该类的实例,然后启用start()方法。

因为继承方式的耦合性有点高,所以一般会使用实现Runnable接口来定义一个线程。

class MyThread implements Runnable{    public void run(){        //处理具体逻辑    }}
MyThread myThread =new MyThread();new Thread(myThread).start();

也可以使用匿名类方式:

new Thread(new Runnable(){    public void run(){        //处理具体的逻辑    }}).start();

在Android中不允许在子线程中进行UI操作。但异步操作可以解决该问题。
1.使用Handler的sendMessage()方法将Message发送出去。
2.Handler收到这条Message并在handleMessage()方法中对他进行处理(handleMessage()是在主线程中进行的)
解析异步处理:
1.Message:在线程之间传递的信息
2.Handler:处理者,发送和处理消息。
3.MessageQueue:消息列队的意思。主要存放所有通过Handler发送的消息。
4.Looper:每个线程的MessageQueue的管家。每个线程只会有一个Looper对象。
为了方便我们在子线程中对UI进行操作,Android还提供了使用AsyncTask:
由于AsyncTask是一个抽象类,所以需要创建一个类去继承他。

class DownloadTask extends AsyncTask<Void,Integer,Boolean>{    ...}

AsyncTask的三个参数:
1.Params执行时需要传入的参数
2.Progress显示当前的进度,指定的泛型作为进度单位
3.Result需要对结果进行返回的类型
AsyncTask中需要重写的方法:
1.onPreExecute()
后台任务开始执行之前调用,。用于界面上的初始化操作
2.doInBackground(Params..)
所用耗时的任务,注意:该方法不能继续UI操作的
3.onProgressUpdate(Params..)
对UI进行操作
4.onPostExecute(Result)
当后台任务执行完毕并通过return进行返回
服务:
定义一个服务:
继承自Service,实现onBind方法。
重写onCreate(),onStartCommand()和onDestroy()三个方法。
onCreate():服务在创建的时候调用,onStartCommand()方法会在每次服务启动时调用,onDestroy()方法会在服务销毁的时候调用。
每个服务需要在AndroidManifest.xml中进行注册。

<service android:name=".MyService"></service>

(四大组件共有的特点)
startService()和stopService()方法都是定义在Context类中的。所以我们可以在活动中直接调用。
让服务自己把自己停止下来:
在MyService的任何一个位置调用stopSelf()
活动和服务进行通信:
利用Binder对象来对服务进行管理。
ServiceConnection(连接器):重写onServiceConnected()方法和onServiceDisconnected()方法,来进行成功绑定和解除绑定的时候调用。
绑定服务:
1.构建Intent对象

Intent bindIntent=new Intent(this,MyService.class);

2.利用bindService()方法将MainActivity和MyService进行绑定。
三个参数:1.Intent对象2.ServiceConnection实例3.标志位(BIND_AUTO_CREATE表示活动和服务进行绑定后自动创建服务)
解除服务:
调用unbindService()方法。
服务的生命周期:
这里写图片描述
如果starService()方法和bindService()方法都被调用。则必须同时调用stopService()和unbindService(),onDestroy()方法才会执行
服务的更多技巧:

0 0
原创粉丝点击