您的位置:首页 > 移动开发 > Android开发

Android四大组件之------Service

2016-10-25 01:14 253 查看
一、服务的概念:

Service是一个应用组件, 它用来在后台完成一个时间跨度比较大的工作且没有关联任何界面。


二、Service的理解

服务是Context的一个对象,它是一个应用组件,可以在后台完成一个长时间的操作,默认在主线程执行。它不提供应用界面,当一个应用可以启动一个服务后,且当用户启动其他应用的时候,这个服务将会在后台执行。常用的案例有:访问网络、播放音乐、文件IO操作大数据的数据库操作。


三、服务的特点

1.Service在后台运行,不用与用户进行交互
2.即使程序被切换到后台,或者用户打开新的应用,服务仍可运行
3.服务并非运行在独立的进程中,而是依赖于创建服务的应用程序进程。如果某个应用进程被杀掉,该服务也会停止
4.在默认情况下,Service运行在应用程序进程的主线程(UI线程)中,如果需要在Service中处理一些网络连接等耗时的操作,那么应该将这些任务放在分线程中处理,避免阻塞用户界面


四、服务的分类

1.Local Service(本地服务)
Service对象与Service的启动者在同个进程中运行, 两者的通信是进程内通信
2.Remote Service(远程服务)
Service对象与Service的启动者不在同一个进程中运行,这时存在一个进程间通信的问题, Android专门为此设计了AIDL来实现进程间通信


五、Service的启动与停止

1.方式一:一般启动

startService(Intent intent)

stopService(Intent intent)

2.方式二:


bindService(Intentintent,ServiceConnectionconnection,Context.BIND_AUTO_CREATE)

unbindService(ServiceConnection connection)

六、Service的生命周期

1.onCreate()—>onBind()—>onUnbind()—>onDestroy()

2. onCreate()—>onStartCommand()—>onDestroy()

3.


七、Service的配置

1.定义一个类继承于Service类
public class MyService extends Service{  }

2.在Androidmanifest.xml文件中配置Service
<service android:name=".local.MyLocalService"/>
//这个是用来配置本地服务的

<service android:name=".remote.MyRemoteService">
<intent-filter> //用了这个就可以实现远程服务了
<action android:name="com.atguigu.l07_service.remote.MyRemoteService.Action"/>
</intent-filter>
</service>


八、使用onBind()开启服务的一些繁琐操作

private ServiceConnection conn;

//绑定服务
public void bindMyService(View v){

if(conn == null) {//做这个判断是为了防止误操作,比如你没开启服务就进行了解绑
conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.e("TAG", "onServiceConnected");
}

@Override
public void onServiceDisconnected(ComponentName name) {
Log.e("TAG", "onServiceDisconnected");
}
};
Intent intent = new Intent(this,LocalService.class);
bindService(intent,conn, Context.BIND_AUTO_CREATE);

Toast.makeText(this, "bindMyService", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "已经绑定过了", Toast.LENGTH_SHORT).show();
}

}

//解绑服务
public void unbindMyService(View v){

if(conn != null) {
unbindService(conn);
conn = null;//设置为null,下次创建链接时才不会报错
Toast.makeText(this, "unbindMyService", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "还没有绑定服务", Toast.LENGTH_SHORT).show();
}

}


@Override

protected void onDestroy() {

super.onDestroy();

if(conn!= null) {

unbindService(conn);

conn = null;//可有可无,有了更好

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Service