您的位置:首页 > 其它

Service

2016-03-11 13:53 267 查看
Service是Android系统的后台服务组件,适用于开发无界面、长时间运行的应用功能,特点是没有用户界面,比Activity 的优先级高,不会轻易被Android系统终止。用于进程间通信。Service是运行在后台的Android组件,位于android.app包下。当应用程序不需要显示外在界面但是需要其在后台运行时,可以使用Service。Service不能自运行,它需要通过某一个Activity或者其他Context对象来调用,如
Context.startService()
Context.bindService()
等 。

Service生命周期



Service的启动是通过调用Context.startService()启动Service,通过调用Context.stopService()或Service.stopSefl()停止Service是由其他的组件启动的,但停止过程可以通过其他组件或自身完成。

private void startService() {
Intent i = new Intent(主Activity类文件名.this, Service类文件名.class);
this.startService(i);//启动
}
private void stopService() {
Intent i = new Intent(主Activity类文件名.this, Service类文件名.class);
this.stopService(i); //停止
}


绑定方式:通过context.bindService()方式启动。使用Service的组件通过Context.bindService()建立服务链接,通过Context.unbindService()停止服务链接。同一个Service可以绑定多个服务链接,这样可以同时为多个不同的组件提供服务。

启动方式和绑定方式的结合

:这两种使用方法并不是完全独立的在某些情况下可以混合使用

,以MP3播放器为例,在后台的工作的Service通过Context.startService()启动某个特定音乐播放,但在播放过程中如果用户需要暂停音乐播放,则需要通过Context.bindService()获取服务链接和Service对象,进而通过调用Service的对象中的函数,暂停音乐播放过程,并保存相关信息。在这种情况下,如果调用Context.stopService()并不能够停止Service,需要在所有的服务链接关闭后,Service才能够真正的停止



启动Service一般需要在AndroidMenifest.xml文件中注册这个Service,此时需要在AndroidManifest.xml中增加对Service的说明。

<Service Android:enable=“true” Android:name = “.创建的Service名字”


示例工程演示了创建简单的Service及调用Service的方法。需要注意如下几点:

A,Service继承自Android.app.Service。需要import android.app.Service

B,在代码中一般需要有重写的onBind方法

C,需要重写了其onStart()、onDestroy()等方法

D,需要编制启动相应Service的Activity类 ,通过start方式、bind方式、通过intent调用等方式来启动Service

E,在AndroidManifest.xml中添加对刚才创建的Service的引用

public class MusicService extends Service{
private MediaPlayer mp;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
mp=MediaPlayer.create(this,R.raw.song1);
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
mp.start();
}
@Override
public void onDestroy() {
super.onDestroy();
mp.stop();
}

}


public class Music extends Activity {
/** Called when the activity is first created. */
Button start,stop;
TextView songName;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findView();
start.setOnClickListener(startlis);
stop.setOnClickListener(stoplis);
songName.setText("Music");
}
private OnClickListener startlis=new OnClickListener(){

public void onClick(View v) {
// TODO Auto-generated method stub
startService(new Intent(Music.this, MusicService.class));
//启动服务
}
};
private OnClickListener stoplis=new OnClickListener(){

public void onClick(View v) {
// TODO Auto-generated method stub
stopService(new Intent(Music.this,MusicService.class));
//停止服务
}
};
public void findView(){
start=(Button)findViewById(R.id.start);
stop=(Button)findViewById(R.id.stop);
songName=(TextView)findViewById(R.id.songName);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: