当前位置:首页 » 安卓系统 » androidservice使用

androidservice使用

发布时间: 2024-10-07 12:00:01

❶ android编程如何让程序后台运行

通过android的四大组件之一的service来实现后台运行,类似Windows上的服务。

1、Android上的service有两种启动方式(或者说两种方法实现service)

①startService()和bindService() ,有区别。

2、简单的使用Service步骤(startService()):

①建立service的子类,重写onStartCommand()。(当服务启动的时候会调用该方法)

java">{

@Override
publicvoidonCreate(){
}

//这个函数在低版本中使用的是onStart(),onStart()在高版本中已经过时了。
@Override
publicintonStartCommand(Intentintent,intflags,intstartId){
}

@Override
publicvoidonDestroy(){
}
}

②在清单文件中声明Service组件

<application>
<serviceandroid:name="HelloService">
<intent-fiter>
<actionandroid:name="xxxxx">
</intent-fiter>
</service>
</application>

③在Activity等调用startService(intent);启动你的Service

Intentintent=newIntent("xxxxx");
//还可以使用Intentintent=newIntent(activity.this,HelloService.class);
startService(intent);

注:两种方法各有不同,具体请看官方API:

http://developer.android.com/guide/components/services.html

❷ Android 之 Service(一)启动,绑定服务

Service(服务)一个运行在后台执行长时间运行的操作组件,它不提供任何用户界面,作为与Activity同级的组件,它依旧是运行在主线程中。
其它组件可以启动一个Service,当这个Service启动之后便会在后台执行,这里需要注意,由于是在主线程中,所以我们需要另外开启一个线程来执行我们的耗时操作。
此外,一个组件还可以与一个Service进行绑定来实现组件之间的交互,甚至可以执行IPC(Inter-Process Communication)进程间通信。
Service可以在后台执行很多任务,比如处理网络事务,播放音乐,文件读写或者与一个内容提供者交互,等等。

本地服务(Local)
该服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外本地服务因为是在同一进程因此不需要IPC,也不需要AIDL。相应bindService会方便很多,当主进程被Kill后,服务便会终止。一般使用在音乐播放器播放等不需要常驻的服务。

远程服务(Remote Service)
该服务是独立的进程,对应进程名格式为所在包名加上你指定的android:process字符串。一般定义方式 android:process=":service" 由于是独立的进程,因此在Activity所在进程被Kill的时候,该服务依然在运行,不受其他进程影响,有利于为多个进程提供服务具有较高的灵活性。由于是独立的进程,会占用一定资源,并且使用AIDL进行IPC比较麻烦。一般用于系统的Service,这种Service是常驻的。

startService启动的服务
用于启动一个服务执行后台任务,不与组件进行通信,停止服务使用stopService。 当一个应用组件比如activity通过调用startService()来启动一个服务的时候,服务便处于启动状态。一旦启动,服务可以在后台无限期地运行下去,即使当启动它的组件已经销毁。通常情况下,一个启动的service执行一个单一的操作并且不会返回任何结果给调用者。

bindService启动的服务
用于启动的服务需要进行通信。停止服务使用unbindService。 当一个应用组件通过调用bindService()来与一个服务绑定时,服务便处于绑定状态。一个绑定的服务提供了一个客户端-服务器端接口来允许组件与服务进行交互,发送请求,得到结果甚至通过IPC进程间通信来完成操作。只有当其它组件与服务进行绑定时,服务才会处于绑定状态。多个组件可以同时与服务绑定,但是当他们全部都解除绑定时,服务就会销毁。

2.BindService:
如果一个Service在某个Activity中被调用bindService方法启动,不论bindService被调用几次,Service的 onCreate 方法只会执行一次,同时 onStartCommand 方法始终不会调用。当建立连接后,Service会一直运行,除非调用unbindService来接触绑定、断开连接或调用该Service的Context不存在了(如Activity被Finish——即通过bindService启动的Service的生命周期依附于启动它的Context),系统在这时会自动停止该Service。

3.StartService AND BindService:
当一个Service在被启动(startService 的同时又被绑定(bindService ),该Service将会一直在后台运行,并且不管调用几次, onCreate 方法始终只会调用一次, onStartCommand 的调用次数与startService 调用的次数一致(使用bindService 方法不会调用 onStartCommand )。同时,调用unBindService 将不会停止Service,必须调用stopService 或Service自身的stopSelf 来停止服务。

4.停止Service:
当一个服务被终止(stopService 、stopSelf 、unbindService )时, onDestory 方法将会被调用——所以我们需要在该方法中清除一些工作(依附该Service生命周期上的,比如:停止在Service中创建并运行的线程)。

1.创建服务

如果你才用的是 startService的方式那么 onBind方法可以忽略
2.注册服务

3.开启服务
start:

bind

绑定服务,一般涉及到组件或进程之间的通信,既然需要通信,那么我们肯定需要一个连接,这里ServiceConnection就是我们所需要的连接,通过Ibinder的传递,我们可以获取到Service的Ibinder对象,从而进行相关操作。

关于粘性服务,这里需要提到 Service的onStartCommand返回值

andorid:name

adroid:exported

android:enabled

android:label

android:process

android:icon

android:permission

关于服务,当我们在应用开发中,如果需要长时间的在后台运行,独立完成某一些事情的情况下,请使用Service!

此文综合: http://www.jianshu.com/p/1e49e93c3ec8 以及自己的一些问题看法,用作学习,回顾之用。

Service 前台服务
请参看 紫豪 http://www.jianshu.com/p/5505390503fa

热点内容
java字符串byte 发布:2024-11-24 08:08:18 浏览:636
idc数据库 发布:2024-11-24 08:04:58 浏览:81
文件夹加密了怎么办 发布:2024-11-24 07:51:33 浏览:419
linux是实时系统吗 发布:2024-11-24 07:23:17 浏览:143
java数据挖掘算法 发布:2024-11-24 07:18:59 浏览:854
我的世界服务器怎么重开指令 发布:2024-11-24 07:14:13 浏览:156
python删除dataframe 发布:2024-11-24 07:05:38 浏览:735
安卓机蓝牙怎么传东西 发布:2024-11-24 06:58:34 浏览:109
android叠效果 发布:2024-11-24 06:58:33 浏览:992
富士通电脑服务器设置u盘启动 发布:2024-11-24 06:56:21 浏览:717