Service

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=trueAndroid: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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值