【Android学习系列】Android- Service总结
来源:互联网 发布:监控录像播放软件 编辑:程序博客网 时间:2024/05/16 04:44
同事问起Service的相关概念,也觉的自己有点模模糊糊,本身并有在项目中实际用到过,于是写个小Demo,对这个Service进行下小小的总结,以免总是忘记。
【基础】
android中服务是运行在后台的东西,级别与activity差不多。既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西。你可以启动一个服务Service来播放音乐,或者记录你地理信息位置的改变,或者启动一个服务来运行并一直监听某种动作。
1:本地服务, Local Service 用于应用程序内部。在Service可以调用Context.startService()启动,调用Context.stopService()结束。在内部可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。无论调用了多少次startService(),都只需调用一次stopService()来停止。
2:远程服务, Remote Service 用于android系统内部的应用程序之间。可以定义接口并把接口暴露出来,以便其他应用进行操作。客户端建立到服务对象的连接,并通过那个连接来调用服务。调用Context.bindService()方法建立连接,并启动,以调用 Context.unbindService()关闭连接。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。
提供给可被其他应用复用,比如定义一个天气预报服务,提供与其他应用调用即可。
context.startService() ->onCreate()- >onStart()->Service running--调用context.stopService() ->onDestroy()
context.bindService()->onCreate()->onBind()->Service running--调用>onUnbind() -> onDestroy()
参考文章:http://www.cnblogs.com/zhangdongzi/archive/2012/01/08/2316711.html
【笔者注】其实所谓的远程和进程,只是按照service的不同应用场景来分的,并没有这种概念。而其创建的两种方式,倒是有其一定的特殊性。
【例子程序】
1. 最简单的例子程序:两个button,分别启动和停止service。
UI的布局就不贴了,放上两个button就行。
先看service类。
public class LocalService extends Service{private static String TAG = "LocalService";@Overridepublic IBinder onBind(Intent intent){// 为了回调的需要,暂时保留return null;}public void onCreate() { Log.i(TAG, "onCreate"); super.onCreate(); } @Override public void onStart(Intent intent, int startId) { Log.i(TAG, "onStart"); super.onStart(intent, startId); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "onStartCommand"); return START_STICKY;}@Override public void onDestroy(){Log.i(TAG, "onDestroy");super.onDestroy(); } }
程序中,onBind方法,是为了回调的需要,比如UI层想要call service中的一些方法时,就可以通过它来传递相关的信息(有待验证)。
1. 这里有点奇怪,service生命周期中的onStart是什么时候调用呢?
2. 出现个error: 09-15 04:16:50.816: E/Trace(779): error opening trace file: No such file or directory 不影响程序运行。
启动和结束service的code:
Intent intent = new Intent(this,LocalService.class);MainActivity.this.startService(intent);MainActivity.this.stopService(intent);
还有另外一种方式:
<service android:name=".localityservice.MusicPlayerService"> //在Manifest中先进行注册<intent-filter><action android:name="com.yang.music" /> //标明只有该名字的intent才可以call它</intent-filter></service>Intent i = new Intent("com.yang.music"); //在程序汇总启动该servicestartService(i);
- 【Android学习系列】Android- Service总结
- android总结篇系列,service
- android service学习总结
- Android-Service学习总结
- Android总结篇系列:Android Service
- Android总结篇系列:Android Service
- Android总结篇系列:Android Service
- Android总结篇系列:Android Service
- Android总结篇系列:Android Service
- Android总结篇系列:Android Service
- Android总结篇系列:Android Service
- Android总结篇系列:Android Service
- Android总结篇系列:Android Service
- Android总结篇系列:Android Service
- Android 中 Service 学习,总结
- Android Service 学习总结 1
- Android之Service学习总结
- android ApiDemo学习(一)service总结
- POJ 3926 Parade 单调队列优化dp
- 关于青春
- PowerDesigner 链接oracle10g
- 中科院外籍院士姚期智:科学家与科学之路
- 一个项目涉及到的50个Sql语句(整理版)
- 【Android学习系列】Android- Service总结
- 9月15日服务计算实验室会议总结
- 计算机系统信息查看命令之systeminfo
- 品牌属地一览
- VC6 工程支持多个 *.rc 资源文件
- 基于Mplayer的QT视频播放器
- 七夕情书之恋恋红尘
- VS2010+OpenCV安装配置
- UVa 490 - Rotating Sentences