Android Service本地服务详解
2012 年 11 月 11 日
释放双眼,带上耳机,听听看~!
1. Service分类
1.1 Service的类型分类

1.2 特点

2.本地Service
2.1具体使用步骤
- 步骤1:新建子类继承Service类
需重写父类的onCreate()、onStartCommand()、onDestroy()和onBind()方法
- 步骤2:构建用于启动Service的Intent对象
- 步骤3:调用startService()启动Service、调用stopService()停止服务
- 步骤4:在AndroidManifest.xml里注册Service
2.2实例DOME
- 步骤1:新建子类继承Service类
需重写父类的onCreate()、onStartCommand()、onDestroy()和onBind()
Myservice
public class MyService extends Service { //启动Service之后,就可以在onCreate()或onStartCommand()方法里去执行一些具体的逻辑 //由于这里作Demo用,所以只打印一些语句 @Override public void onCreate() { super.onCreate(); System.out.println("执行了onCreat()"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("执行了onStartCommand()"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); System.out.println("执行了onDestory()"); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } }
- 步骤2:在主布局文件设置两个Button分别用于启动和停止Service
activity_main.xml(代码简单所以过滤不写) - 步骤3:构建Intent对象,并调用startService()启动Service、stopService停止服务
MainActivity.java
public class MainActivity extends Activity { private MyConn conn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //点击按钮 开启服务 通过startservice public void click1(View v) { Intent intent = new Intent(this,DemoService.class); startService(intent); //开启服务 } public void click2(View v) { Intent intent = new Intent(this,DemoService.class); stopService(intent); } //点击按钮 绑定服务 开启服务的第二种方式 public void click3(View v){ Intent intent = new Intent(this,DemoService.class); //连接到DemoService 这个服务 conn = new MyConn(); bindService(intent,conn , BIND_AUTO_CREATE); } //点击按钮手动解绑服务 public void click4(View v){ unbindService(conn); } @Override protected void onDestroy() { //当Activity销毁的时候 要解绑服务 unbindService(conn); super.onDestroy(); } //定义一个类 用来监视服务的状态 private class MyConn implements ServiceConnection{ //当服务连接成功调用 @Override public void onServiceConnected(ComponentName name, IBinder service) { System.out.println("onServiceConnected"); } //失去连接调用 @Override public void onServiceDisconnected(ComponentName name) { } } }
-
步骤4:在AndroidManifest.xml里注册Service
AndroidManifest.xml
//注册Service服务
测试结果

Paste_Image.png
Androidmanifest里Service的常见属性说明
属性 | 说明 | 备注 |
---|---|---|
android:name | Service的类名 | |
android:label | Service的名字 | 若不设置,默认为Service类名 |
android:icon | Service的图标 | |
android:permission | 申明此Service的权限 | 有提供了该权限的应用才能控制或连接此服务 |
android:process | 表示该服务是否在另一个进程中运行(远程服务) | 不设置默认为本地服务;remote则设置成远程服务 |
android:enabled | 系统默认启动 | true:Service 将会默认被系统启动;不设置则默认为false |
android:exported | 该服务是否能够被其他应用程序所控制或连接 | 不设置默认此项为 false |
3. 常见的生命周期使用

Paste_Image.png
3.1 只使用startService启动服务的生命周期

startService启动服务的生命周期
3.2 只使用BindService绑定服务的生命周期

BindService绑定服务的生命周期
3.3 同时使用startService()启动服务、BindService()绑定服务的生命周期
