您的位置:首页 > 移动开发 > Android开发

Android四大组件之Service(观第一行代码2随记)一.服务简介

2018-03-13 00:06 363 查看
服务(service)是用来实现后台运行程序的解决方案,适合那些不需要和用户交互而且需要长期运行的任务。服务可以不依赖任何用户界面,即使被切换到后台,或者用户打开了另一个应用程序,服务依然能够正常运行。
PT:一般的服务并不会自动开启子线程,一般代码都默认运行在主线程中,所以如果服务里需要处理某个具有复杂逻辑的问题(处理一些耗时的逻辑),那么可能会导致主线程阻塞,也就是会出现ANR(Application not responding)情况。当新建一个继承自Service的MyService服务时,如果采用IDE的选项来建立Service那么会自动在AndroidManifest.xml文件注册,但是如果是自己手动建立了一个继承自Service的普通Java类,一定要记得在配置文件中去注册它!!!
一般在创建的MyService类中会用到四个方法,首先因为onBind()是Service类的唯一一个抽象方法,所以这个不用多想肯定得立马实现它啊,然后还有其他三贱客:onCreate(),onStartCommand(),onDestory()。
        其中,onCreate()会在服务创建的时候调用,onStartCommand()方法会在每次服务启动的时候调用,onDestory()方法会在服务销毁的时候调用。通常,我们把耗时的需要一启动就立刻执行的动作写在onStartCommand()方法里,然后当服务销毁时,再去通过onDestory()来销毁回收那些不再使用的资源。

        关于启动和停止服务:可以通过调用startService(intent)和stopService(intent)两种方法来实现启动服务和停止服务。当然,这边的intent实例也并不复杂,类似于从主活动到第二个活动的Intent写法(Intent intent=new Intent(MainActivity.this,SecondActivity.class))。现在对象换成了服务,也就是Intent intent=new Intent(MainActivity.this,MyService.class)极为类似,所以可以联想记忆。

        那么为什么可以直接调用startService(),stopService(),startActivity()这些方法呢,这是因为这些方法都定义在Context类的子类ContextWrapper类中,所以可以直接调用。

        对于这种startService()的服务启动方法,有一些不足之处,如果没有点击stopService(),它启动之后就会一直运行着,有的情况下需要想办法把它关闭啊,这时你的好帮手stopSelf()就来了,可以让服务停下来。


写了一下延时程序,然后就可以控制一定时间后服务自己停止。

        须知:onCreate()方法只在服务第一次创建的时候调用,而onStartCommand()方法则是每次启动服务都会调用,由于刚才第一次点击startService,服务还没创建过,所以两个方法都会执行,之后哪怕你再疯狂点击startService按钮,也只有onStartCommand()方法会得到执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: