Android服务是开发Android应用程序的重要组成部分。与主动活动不同,服务在后台运行,服务没有接口,其生命周期与主动活动有很大不同。通过使用该服务,我们可以实现一些后台操作,比如从远程服务器加载网页。下面我们来看看具体情况,有需要的朋友可以参考一下。
目录
1、服务目的2、继承服务3、启动和停止服务4、自动启动服务前言:。
Android服务是开发Android应用程序的重要组成部分。与主动活动不同,服务在后台运行,服务没有接口,其生命周期与主动活动有很大不同。通过使用服务,我们可以实现一些后台操作,比如从远程服务器加载网页。服务可以帮助我们在Android中进行多任务处理。
我们已经知道,Android活动可以启动和停止,并且可以在系统资源过低时被销毁。服务旨在用更长的执行时间来完成任务。Android服务可以从活动中启动,也可以从广播接收器和其他服务中启动。
必须注意的是,使用服务并不需要自动创建一个新的线程,所以如果我们在服务中实现一个简单的逻辑,并不会花费很长的处理时间,我们实际上并不需要在单独的线程中运行它。但是,如果我们想要实现复杂的逻辑并长时间处理它,我们必须创建一个新的线程来执行它,否则在主线程上运行服务可能会导致ANR问题。
1、服务用途
服务适合两种用途:
实现多任务
激活进程间通信(IPC)进程间通信
第一种情况的典型例子是需要从远程服务器下载数据。在这种情况下,我们可以让应用程序同时与用户交互,并开始在后台完成工作,而用户可以继续使用应用程序,并在服务完成时向用户发送消息。
在第二种情况下,我们可以通过服务“共享”一些常用的功能,这样不同的应用程序就可以重用这些功能。例如,假设我们有一个发送电子邮件的服务,我们想在几个应用程序之间共享这个服务,这样我们就不必重写相同的代码。在这种情况下,我们可以使用IPC来公开服务,该服务将接口公开给“远程”并由其他应用程序调用。
下面是一个简单的服务,它继承了服务。
2、继承Service
公共类TestService扩展服务{
@覆盖
public I binder on bind(Intent arg 0){
返回null
}
}
服务是有生命周期的,可以实现其中一些回调方法:
公共类TestService扩展服务{
@覆盖
public void onCreate() {
super . oncreate();
}
@覆盖
public void onDestroy() {
super . on destroy();
}
@覆盖
public int onstart command(Intent Intent,int flags,int startId) {
返回super.onStartCommand(intent,flags,startId);
}
@覆盖
public I binder on bind(Intent arg 0){
返回null
}
}
只有在创建服务时,onCreate方法才会被调用一次。如果服务已经在运行,则不会调用此方法。我们也不直接调用,操作系统OS调用这个方法。
OnStartCommand是最重要的方法,因为当它被调用时,我们需要启动服务。在这个方法中,我们需要将意图传递给我们运行的服务,这样我们就可以与服务交换一些信息。在该方法中实现的逻辑可以在该方法中直接执行。如果执行需要很长时间,我们需要创建一个线程。如您所见,这个方法要求我们返回一个整数作为结果。这个整数表示操作系统如何处理服务。
START_STICKY :使用此返回值。如果OS杀死了我们的服务,它会重新创建它,但发送给服务的意图不会再被传递。这样,服务就一直在运行。
START_NOT_STICKY:如果操作系统终止了该服务,在客户端显式激活onStart命令之前,不会再次创建该服务。
START_REDELIVER_INTENT: 类似于START_STICKY,意图会再次传递给服务。
当服务被销毁时,操作系统调用OnDestroy。
服务需要在Manifest.xml 中配置:
服务android:name='。TestService ' Android:enabled=' true '/
3、启动和停止服务
我们知道,服务必须首先启动,并在完成其任务后最终停止。我们可以从Activity activity开始,我们可以使用intention向服务传递一些信息。假设我们有两个按钮,一个开始按钮和一个停止按钮。
btnStart.setOnClickListener(新视图。OnClickListener() {
@覆盖
公共void onClick(视图v) {
Intent I=new Intent(main activity . this,test service . class);
i.putExtra('name ',' survivingwith Android ');
main activity . this . start service(I);
}
});
btnStop.setOnClickListener(新视图。OnClickListener() {
@覆盖
公共void onClick(视图v) {
Intent I=new Intent(main activity . this,test service . class);
main activity . this . stop service(I);
}
});
运行效果如下:
IntentService
正如我们前面提到的,服务运行在主线程中,所以在这个服务中执行一些逻辑时,我们应该非常小心。必须考虑到,如果这个逻辑是一个阻塞操作或需要很长时间才能完成,它将导致ANR问题。在这种情况下,逻辑被转移到一个单独的线程,这意味着我们必须在onStartCommand方法中创建线程并运行它。还有一种衍生服务叫做IntentService,可以简化这些操作。当我们不需要同时处理多个请求时,这个类很有用。这个类创建一个工作线程来处理不同的请求,
功能如下:
创建一个单独的线程来处理请求
创建一个请求队列,然后传递一个意向消息。
创建onStartCommand的默认实现
处理完所有请求后停止服务。
公共类TestIntentService扩展IntentService {
公共测试服务(){
super(' TestIntentService ');
}
@覆盖
受保护的void on handle Intent(Intent Intent){
}
}
在HandleIntent中,我们实现逻辑,不需要关心这项工作需要半天或更长时间,因为这个方法在一个单独的线程中运行。
4、自动启动服务
如果我们希望在智能手机打开时启动它,我们将首先创建一个广播接收器,侦听该事件,然后启动服务。
公共类BootBroadcast扩展BroadcastReceiver {
@覆盖
接收时公共无效(上下文ctx,意图intent) {
ctx.startService(new Intent(ctx,test service . class));
}
}
Manifest.xml中配置:
接收者android:name='。'引导广播'
意图过滤器
action Android:name=' Android . intent . action . boot _ COMPLETED '/
/意图-过滤器
/接收器
关于Android服务教程的这篇文章到此为止。有关Android服务的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。