Android Service用法详解
来源:互联网 发布:淘宝店铺装修教程网站 编辑:程序博客网 时间:2024/04/29 20:01
什么是Service?
Service是 Android 系统中的一种组件,它和Activity的级别差不多,但又Activity不同,它是不能与用户交互的,但可以和其他组件进行交互。它不能自己运行,只能后台运行。
Service的特点:没有可视的UI、后台运行,运行不阻塞前台UI、拥有服务的进程具有较高的优先级
Service的生命周期:
Android Service的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法,具体的可以看下面的实例。
服务启动的两种方式及用法:context.startService()和context.bindService()方式启动
提醒:使用Service之前必须在androidMainfest.xml 中注册
① context.startService()
启动:context.startService() ---> onCreate() ---> onStartCommand()
销毁:ontext.stopService() ---> onDestroy();
如果Service还没运行,则Android会先调用onCreate()方法,然后再调用onStartCommand();
如果Service已经运行了,则只调用onStartCommand(),所以一个Service的onStartCommand(),方法 可能会调用多
实例代码:通过打印结果可知其执行顺序
com.liu.activity包:
public class ServiceTestActivity extends Activity {private Button btn_start, btn_end;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.service_test);btn_start = (Button) findViewById(R.id.btn_satrt);btn_end = (Button) findViewById(R.id.btn_end);btn_start.setOnClickListener(new OnClickListener() {public void onClick(View v) {System.out.println("--->启动服务");// 通过 Intent 启动已注册的 servicestartService(new Intent("com.sharpandroid.Music"));}});btn_end.setOnClickListener(new OnClickListener() {public void onClick(View v) {System.out.println("--->停止服务");stopService(new Intent("com.sharpandroid.Music"));}});}}
com.liu.service包:public class Service_MusicPlayer extends Service {private final String TAG = "Service_MusicPlayer";MediaPlayer mPlayer;public void onCreate() {Log.i(TAG, "--------->OnCreate()");super.onCreate();}public void onStart(Intent intent, int startId) {Log.i(TAG, "--------->OnStart()");// 在layout下创建raw文件夹,放一个音乐文件(自命名如music)在raw下mPlayer = MediaPlayer.create(this, R.raw.music);super.onStart(intent, startId);mPlayer.start();}public void onDestroy() {Log.i(TAG, "--------->onDestroy()");super.onDestroy();mPlayer.stop();}public IBinder onBind(Intent intent) {return null;}}
结果:
② context.bindService()
启动:context.bindService() ---> onCreate() --->onBind();
销毁:onUnibind() ---> onDestroy()
onBind()方法将返回给客户端一个IBind接口实例,IBind允许客户端调用服务的方法,比如得到Service 允许状态或者其他操作这个时 ? 候调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Service就会调用onUnibind() ---> onDesytoy()相应退出实例代码:
com.liu.activity包:
public class TestActivity extends Activity {private Button btn_satrt, btn_end;private Bind_Service Bind_Service = null;protected boolean isBound = false;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);btn_satrt = (Button) findViewById(R.id.btn_start);btn_end = (Button) findViewById(R.id.btn_end);btn_satrt.setOnClickListener(new OnClickListener() {public void onClick(View v) {System.out.println("Bind服务");Intent intent = new Intent(TestActivity.this,Bind_Service.class);// bindService(service, conn, flags)用来绑定一个服务TestActivity.this.bindService(intent, mConnection,Context.BIND_AUTO_CREATE);isBound = true;}});btn_end.setOnClickListener(new OnClickListener() {public void onClick(View v) {if (isBound) {System.out.println("unBind服务");// unbindService(conn)解除绑定TestActivity.this.unbindService(mConnection); } }});} //ServiceConnection是bindService()的关键步骤,将Activity与Service捆绑在一起private ServiceConnection mConnection = new ServiceConnection() {public void onServiceDisconnected(ComponentName name) {Bind_Service = null; }public void onServiceConnected(ComponentName name, IBinder service) { Bind_Service = ((Bind_Service.LocalBinder) service).getService();}};}
com.liu.service包:public class Bind_Service extends Service {//内部类,作用返回Bind_Service对象public class LocalBinder extends Binder {public Bind_Service getService() {return Bind_Service.this;}}@Overridepublic IBinder onBind(Intent arg0) {System.out.println("------->onBind()");return null;}@Overridepublic void onCreate() {System.out.println("------->onCreate()");super.onCreate();}@Overridepublic void onDestroy() {System.out.println("------->onDestroy()");super.onDestroy();}@Overridepublic void onStart(Intent intent, int startId) {System.out.println("------->onStart()");super.onStart(intent, startId);}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {System.out.println("------->onStartCommand()");return super.onStartCommand(intent, flags, startId);}}
结果:
总结:startService()启动方式代码少、简单,适用于简单的应用,而bindService()操作性强,使用起来想Activity。
两者区别:bindService()方式启动的Service随Activity的生命结束而结束,startService()则不 受影响。
- Android Service用法详解
- Android Service(服务)详解·(二)Service基本用法
- Android Service的用法
- android Service的用法
- Android Service的用法
- android service 用法
- Android中service用法
- Android Service的用法
- Android-Service的用法
- android Service的用法
- Android Service基本用法
- Android Service详解(1)
- Android Service 详解
- 【android】Service详解
- android之Service详解
- android service基础知识详解
- android service详解
- Android SERVICE(详解一)
- TCP重组基本原理
- iOS基于百度地图的开发(4)——路径搜索
- eclipse下的Tomcat配置及jsp网页调试
- C++模板常用使用方法介绍
- 无法调试和设置断点无效
- Android Service用法详解
- 关于P2P流量的识别方式
- 【菜鸟学设计】——装饰者模式(Decorator)
- 我的第一桶金
- 【学习Android遇到的错误】Unable to resolve target 'android-9'解决办法
- 设计阶段如何画用例视图(Use-Case View)
- 利用预渲染加速iOS设备的图像显示
- Linux-Makefile(GNU Makefile之"ifeq()"作用)
- 类与类之间的关系图(Class Diagram,UML图)