Activity和service

来源:互联网 发布:线刷用什么软件 编辑:程序博客网 时间:2024/06/16 11:37

service作为Android四大组件之一,在每一个应用程序都扮演非常重要的角色,它主要在后台处理一些耗时的逻辑,或者执行一些需要长期运行的任务,必要时甚至可以在程序退出的情况下,让Service在后台继续保持运行状态。Service的生命周期有onCreate()只使用一次,onStartCommand()使用多次,onDestroy(),其中有两种方式来启动Service,第一种是通过StartService,通过StartService启动后,service会一直无限期运行下去,只有外部调用了stopService()获stopSelf()方法时,该Service才会停止运行并销毁。第二种方式:通过bindService启动Service.

bindService启动服务的特点:

1.bindService启动的服务和调用者是典型的client-server模式。调用者是client,service则是server端。server只有一个,但绑定到service上面的client可以有一个或很多个,client指的是组件,比如Activity.

2.client可以通过IBinder接口获取Service实例,从而实现在client端直接调用Service中的方法以实现灵活交互,这在通过startService方法启动中是无法实现的。

3.bindService启动服务的生命周期与其绑定的client息息相关。当client销毁时,client会自动与Service解除绑定。当然,client也可以明确调用context的unbindService()方法与Service解除绑定。当没有任何client与Service绑定时,Service会自行销毁。

Activity和Service的交互方式主要有广播交互,通过共享文件交互,通过Messenger(信使)交互,通过自定义接口交互,通过AIDL交互。

Thread:Thread是程序执行的最小单元,可以用Thread来执行一些异步的操作。

service:service是android的一种机制,当它运行的时候如果是local service,那么对应的Service是运行在主进程的main线程上的,如果是Remote Service,那么对应的Service则是运行独立进程的main线程上。

Thread的运行是独立的,也就是说当一个Activity被finish之后,如果没有主动停止Thread或者Thread里的run方法没有执行完毕的话,Thread也会一直执行。因此当Activity被finish之后,不再持有该Thread的引用,也就是不能再控制该Thread,另一方面没有办法在不同的Activity中对同一Thread进行控制。

广播交互:Activity与Service的交互,可能很多人首先想到的就是BroadCast--广播,在Android中,广播室系统提供的一种很好的交互方式,比如:在电池电量过低,开机完成等情况下,系统都会发出相应的系统广播,应用程序只需要注册相应的广播接收器,就可以接受到这些系统的广播。同时,我们也可以定义自己的广播,这样在不同的Activity,service以及应用程序之间,就可以通过广播来实现交互

共享文件交互:共享文件指的是Activity和Service使用同一个文件来达到传递数据的目的,使用SharedPreferences来实现共享,也可以使用其他事IO方法实现,通过这种方法交互需要注意,对于文件的读写使,同一时间只能一方读一方写,不能两方同时写。

Messenger交互:1.在Server端创建信使对象mMessenger = new Messenger(mHandler) 2.Client端使用bindService()绑定Server端。3.Server端的onBind()方法返回一个binder对象return mMessenger.getBinder();4.Client端使用返回的binder对象得到Server端信使。5.client端可以使用这个Server端的信使对象向Server端发送信息rMessenger,send(msg);这样Server端的Handler对象就能收到消息了,然后可以在其handlerMessage(Messgae msg)方法中进行处理,经过5个步骤之后只有client端向Server端发送消息,这样的消息传递时单向的。

自定义接口交互:通过自己接口的实现来达到Activity与Service交互的母的,通过在Activity和service之间架设一座桥梁,从而达到数据交互的目的,而这种方式和ALDL非常相似

AIDL:属于Android的IPC机制,常用于夸进程通信,主要实现原来基于底层BInder机制。


原创粉丝点击