初识Service
刚刚看到这个词你可能会问,这是什么东西?服务?那么Activity大家已经够为熟悉了吧,那么我打个比喻,Service就是不显示界面的Activity,也就是后台运行,可以在没有UI情况下进行运行。
- service组件 service是没有显示UI的操作组件,例如,有时候你退出了音乐播放器,开始进入其他Activity界面例如去玩qq,音乐还是在后台响起,给Activity做必要的支持。开发时候用户只需要继承android.app.Service;就可以使用了
- Service生命周期
service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径:
A started service
被开启的service通过其他组件调用 startService()被创建。
这种service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它。
当service被停止时,系统会销毁它。
A bound service
被绑定的service是当其他组件(一个客户)调用bindService()来创建的。
客户可以通过一个IBinder接口和service进行通信。
客户可以通过 unbindService()方法来关闭这种连接。
一个service可以同时和多个客户绑定,当多个客户都解除绑定之后,系统会销毁service。
我们先做一个实例实现:
Android Service的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法,具体的可以看下面的实例。
这里说明onStart()已经被onStartCommande所代替
首先定义sevice:
public class MyService extends Service{ public void onCreate() { System.out.println("****onCreate"); } @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } public void onDestroy(){ System.out.println("****onDestroy"); } public int onStartCommand(Intent intent,int flag,int startid){ System.out.println("****onStart Intent"+intent+" flag "+flag+" startid:"+startid); return Service.START_CONTINUATION_MASK; } }
然后定义布局文件,应该启动关闭service
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="start" android:text="启动Service" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="stop" android:text="停止Service" />
主Activity
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void start(View v){ MainActivity.this.startService(new Intent(MainActivity.this,MyService.class)); } public void stop(View v){ MainActivity.this.stopService(new Intent(MainActivity.this,MyService.class)); } }
最后记得一点,一个service文件完成后记得在Androidmainfest进行注册,
在application节点下写上
<service android:name="MyService" />
如图:
点击启动按钮,控制台输出
我们仔细看后面输出:
然后我们调用手机设置里面的应用程序,查看运行的:
上图显示正在运行中的service
接下来我们点击关闭按钮:
相关推荐
Activity和Service生命周期及使用AIDL通信
安卓Service生命周期,一个小Demo,方便了解。
Android说明Service生命周期的代码例子。用于演示Service组件从创建到销毁的完整生命周期,以及IntentService的使用例子。
NULL 博文链接:https://cdxs2.iteye.com/blog/1941613
android项目教程Service生命周期.pptx
Service概念及用途: Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,那...Service生命周期 : Android
AndroidService生命周期及用法[收集].pdf
Android中演示Service生命周期的代码清单.pdf 学习资料 复习资料 教学资源
Android中Service生命周期演示案例的任务要求.pdf 学习资料 复习资料 教学资源
非常简单明了的 android java 层的 service分析。
组件生命周期将讨论活动、服务、广播接收者的生命周期——包括在生命周期中他们可能的状态、通知状态改变 的方法、及这些状态的组件寄宿的进程被终结和实例被销毁的可能性。 上篇Android开发之旅:组件生命周期(一...
startService启动方式,只在activity中启动和销毁,和activity关系不大,即使antivity退出,服务任然运行,比如后台放音乐,对应生命周期: bindService启动方式,和activity绑定后,和activity共存亡,activity...
一个小demo,通过求平均值,测试service的生命周期以及启动方式!
android Service的生命周期 bind以及startService两种方式 对应的生命周期
项目视频介绍#标题视频地址1服务的生命周期视频12服务的生命周期视频23Android Service全面认识三
Service的生命周期、两种启动方法的区别 一、A started service onCreate, onStartCommand, onBind 和 onDestroy。这几个方法都是回调方法,都是由Android操作系统在合适的时机调用的,并且需要注意的是这几个回调...
Android Service类与生命周期 Service是Android四大组件与Activity最相似的组件,都代表可执行的程序,区别在于Service一直在后台运行且没有用户界面。 1.Service的类图和生命周期 先来看看Service的类图: 接...