文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android服务Service的用途是什么

2023-06-25 12:29

关注

本篇内容介绍了“Android服务Service的用途是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

前言:

Android的服务是开发Android应用程序的重要组成部分。不同于活动Activity,服务是在后台运行,服务没有接口,生命周期也与活动Activity非常不同。通过使用服务我们可以实现一些后台操作,比如想从远程服务器加载一个网页等。服务能帮助我们在Android中实现多任务。

  我们已经知道,安卓的活动可以启动,停止,当系统资源太低时可以销毁,服务被设计为实现具有更长执行时间的任务。安卓的服务可以从活动Activity中启动,也可以从一个广播接收器和其他服务中启动。

  必须注意,使用服务并不需要自动创建新的线程,所以如果在服务中我们实现一个简单的逻辑,这不需要很长的时间去处理,我们其实不需要将它运行在单独的线程。但是如果我们要实现复杂的逻辑,用很长一段时间去处理,我们就必须采取创建一个新线程去执行,否则在主线程上运行服务,可能会导致ANR问题。

1、服务用途

服务适合两种用途:

第一种情况的典型的例子是: 需要从远程服务器下载数据,在这种情况下,我们可以让应用同时与用户进行交互,并在后台开始完成工作,而用户可以继续使用应用程序,当服务完成后发送一个消息给用户。

在第二种情况下,我们可以通过服务“共享”一些常用的功能,使不同的应用程序可以重用这些功能。例如,假设我们有一个发送电子邮件的服务,我们希望在几个应用程序共享此服务,这样不必重写相同的代码。在这种情况下,我们可以使用IPC使服务公开,这个服务向“远程”暴露接口,被其他应用程序调用。

下面是一个简单的服务,继承Service

2、继承Service

public class TestService extends Service {    @Override    public IBinder onBind(Intent arg0) {               return null;    }}

服务是有生命周期的,可以实现其中一些回调方法:

public class TestService extends Service {    @Override    public void onCreate() {               super.onCreate();    }    @Override    public void onDestroy() {               super.onDestroy();    }     @Override    public int onStartCommand(Intent intent, int flags, int startId) {               return super.onStartCommand(intent, flags, startId);    }    @Override    public IBinder onBind(Intent arg0) {               return null;    }}

  只有服务被创建时,方法onCreate才会被唯一的调用一次。如果该服务已在运行这个方法将不会被调用。我们也不是直接调用它,操作系统OS调用这个方法。

  OnStartCommand是最重要的方法,因为它被调用的时候,我们需要启动服务。在这个方法中,我们需要向我们运行的服务传递意图,这样我们就可以与服务交换一些信息。在这个方法中实现的逻辑可以直接在这个方法中被执行,如果执行很花费时间,我们就需要创建一个线程。正如你可以看到这个方法要求我们返回一个整数作为结果。此整数表示服务如何由操作系统来处理。

OnDestroy是在服务销毁时由操作系统调用。

服务需要在Manifest.xml 中配置:

<service android:name=".TestService" android:enabled="true"/>

3、启动和停止服务

  正如我们所知道服务必须首先被启动,并在完成它的任务后最终停止。我们可以从活动Activity启动它,我们可以使用Intent传递给服务一些信息。假设我们有两个按钮,一个开始和一个停止服务.

btnStart.setOnClickListener(new View.OnClickListener() {     @Override    public void onClick(View v) {        Intent i = new Intent(MainActivity.this, TestService.class);        i.putExtra("name", "SurvivingwithAndroid");               MainActivity.this.startService(i);           }}); btnStop.setOnClickListener(new View.OnClickListener() {     @Override    public void onClick(View v) {        Intent i = new Intent(MainActivity.this, TestService.class);        MainActivity.this.stopService(i);    }});

运行效果如下:

Android服务Service的用途是什么

IntentService

  正如我们前面提到的服务运行在主线程,所以我们在本服务执行一些逻辑要非常小心。必须考虑到,如果这个逻辑是一个阻塞操作,或者需要较长的时间来完成,会导致一个ANR问题发生。在这种情况下,将逻辑转移到一个单独的线程,这意味着我们必须在onStartCommand方法创建线程并运行它。还有另一类称为IntentService的衍生服务,可以简化这些操作。当我们不需要同时处理多个请求,这个类是有用的。这个类创建一个工作线程来处理不同的请求,

功能如下:

public class TestIntentService extends IntentService {    public TestIntentService() {        super("TestIntentService");           }    @Override    protected void onHandleIntent(Intent intent) {    }}

onHandleIntent里面我们实现了逻辑,而无需关心这作业需要半天或更长,因为这种方法在一个单独的线程中运行。

4、自动启动服务

  如果我们想在智能手机开机时启动它,我们先创建一个广播接收器,监听到这个事件,然后启动该服务。

public class BootBroadcast extends BroadcastReceiver {    @Override    public void onReceive(Context ctx, Intent intent) {               ctx.startService(new Intent(ctx, TestService.class));    }}

 Manifest.xml中配置:

<receiver android:name=".BootBroadcast">       <intent-filter >        <action android:name="android.intent.action.BOOT_COMPLETED"/>                   </intent-filter></receiver>

“Android服务Service的用途是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯