前面一个帖子,小编和大家大概了解了一下AsyncTask的多线程编程技术,今天我想聊一聊Android的四大组件(神器)之一的Service。
要想精通Service的相关知识点,还是需要学习很多东西的,当然小编今天写的这篇文章只能算是让新手快速了解何为Service、如何快速上手并且快速掌握Service的使用方法,算是入门级的教程。好了,老规矩了,废话不多说,我们直接上代码来看看Service如何使用。
PS:在这边小编想插一句嘴,如果大家还在用Eclipse和ADT开发项目,强烈介意尝试或转向AS(Android Studio),至于原因,你问度娘,反正小编自从用了AS,像吃了麦炫,手指停不下来。
----------------------------------------------------------------------------------------------------------------------------------------
【定义一个服务】
首先,我们定义一个MyService.java类,当然作为一个服务类,必须要继承Service(android.app.Service),看代码:
Service --> public abstract IBinder onBind(Intent intent) 这是一个抽象方法,必须被子类重写!
ok,服务定义好了,不能就这么空吧,光溜溜的总得放点干货,不然这个服务就是个摆设,那么下面我们就让这个服务发挥它的作用!
我们在服务里面重写Service中的另一些常用的方法,看代码:
这边不得不重点提一下onStartCommand()这个方法,因为我们服务所需要处理的逻辑代码都写在这个方法中。
和添加Activity一样,我们添加了一个服务,那么在AndroidManifest.xml文件中必须进行注册才能生效,而且我需要告诉你,这是Android四大组件所共有的特点!!!
【启动和停止服务】
服务定义好了,下面我们就直接上代码,来看看这个服务如何启动和停止。
(1)先添加两个Button(activity_main.xml)
(2)接下来,修改主函数MainActivity的代码:
上面的代码真的是太简单了,主要作了以下工作:
(1)取得startService和stopService两个按钮实例,并且注册了点击事件;
(2)通过Intent对象,调用Activity的startService()和stopService()方法来启动和停止服务。
Notice:你们有没有发现一个问题?这里的活动的启动和停止完全是由活动本身控制的,如果我们start了服务,但是没有点击stop,那么服务会一直处于运行状态,此时服务如何让自己停止下来?
庆幸的是,我们可以在不点击stopService按钮的前提下,调用stopSelf()这个方法就能让服务停下来!这么说不明白?没关系,下面我们会通过代码告诉你怎么用它。
----------------------------------------------------------------------------------------------------------------------------------------
【小测试】
既然上面的代码已经能够完成服务的启动和停止的逻辑流程了,那么口说无凭,也很难让人信服,那小编就打个Log给你看看,我们一起看看Service是如何运作的,来,上代码!
这个代码也太简单了吧,添加了3行Log,目的就是看:在我们点击两个按钮的时候,整个Service什么时候创建,什么时候启动,什么时候毁灭!
请相信我,虽然代码很简单,逻辑也很low,但是这样的学习和思考的过程在以后你编写代码的时候,了解Service的生命周期是很很很重要的!
我们来看一下执行结果,运行程序,查看Logcat中的打印日志:
(1)第一次点击StartService按钮后,MyService中的onCreate()和onStartCommand()方法都执行了,图中黄色箭头所示!
此时,我们可以在手机 --> 设置 --> 应用 --> 运行中看到这个服务,小编给您截个图体验一下:
(2)然后我们点击stopService按钮后,MyService中的onDestory()方法被执行,图中蓝色箭头所示!
(3)此时可能你会有一个疑问?当我们点击了startService按钮以后,onCreate()和onStartCommand()方法同时被执行,这两个方法有什么区别?
OK!图中的红色箭头给了我们答案:onCreat()方法是在服务第一次创建的时候调用的,而onStartCommand()方法则在每次启动服务的时候都会被调用。
当我们在服务未启动的时候,点击startService按钮,则此时会执行两个方法;
但是服务启动完成之后,再次点击(随便你点几次)startService按钮,你会发现只有onStartCommand()方法被执行。
Tags:Service | 2017/7/17 | 发表评论