【Android学习系列】Android- Service总结

本文详细介绍了Android中的Service概念,包括本地服务(LocalService)和远程服务(RemoteService)的区别及使用场景,并提供了简单的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同事问起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";
	
	@Override
	public 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"); //在程序汇总启动该service
startService(i);






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值