Android基础-Service(服务)

Android Service主要用于后台运行和跨进程通信,没有UI界面,适合执行耗时操作。服务经历创建、启动和销毁三个生命周期阶段。创建时调用onCreate(),启动时调用onStart(Intent, int),销毁时调用onDestroy()。需在AndroidManifest.xml声明服务。启动服务可通过startService()和stopService(),或与Activity绑定,Activity退出时自动关闭服务。绑定服务涉及AIDL(Android Interface Definition Language),用于进程间通信。" 135469492,11183300,LSTM-Attention模型在多特征分类预测的应用,"['神经网络', 'LSTM', '分类', 'LSTM-Attention']
摘要由CSDN通过智能技术生成

服务的作用和目标:

       让应用后台运行;

       让应用能够跨进程访问,实现不同进程之间的通信。(AIDL(Android Interface definition language)一种通信接口描述语言

注:服务没有自己的界面,长用于一些耗时操作,比如下载,播放音乐等。


服务的生命周期(三个阶段):

       创建服务(public void onCreate(););

       开始服务(public void onStart(Intent intent, int startId););

       销毁服务(public void onDestroy(); )。

创建服务在启动服务(startService(serviceIntent);)时就会被调用,然后再调用开始服务,当收到销毁服务的命令(stopService(serviceIntent);)时才会调用销毁服务的方法。创建服务和销毁服务只会被调用一次。

服务作为四大组件之一,跟其他三个组件有着一个共同的特点,就是一旦创建一个服务之后就要在AndroidManifest.xml声明。

<service android:enabled="true" android:name=".MyService" /> 
由此可见,服务的生命周期应该是这样:

1.创建服务(这里要判断服务是否已经存在,若存在则跳到第二步)--->>2.开始服务--->3.销毁服务


服务的两种启动方式:

       通过startService启动,stopService销毁;

       通过将服务和Activity绑定,达到在Activity退出时能自动关闭服务的效果。

上述两种方式,第一种已经介绍过了,然后介绍第二种。

服务绑定:

public boolean bindService(Intent service,  ServiceConnection conn, int flags);

第一个参数是一个Intent对象,第二个参数是用来连接被Intent指定的服务对象,第三个参数是标志位,通常为常量Context.BIND_AUTO_CREATE。

服务解除绑定:

unbindService(serviceConnection); 
绑定服务需要重写几个方法,分别是:

public IBinder onBind(Intent intent) 
绑定成功后就会调用此方法

public void onRebind(Intent intent)  
重新绑定后会调用此方法,如果不需要可以不重写

public boolean onUnbind(Intent intent) 
解除绑定会调用此方法

然后需要我们在Activity中新建一个ServiceConnection的对象,并且重写ServiceConnection中的两个方法

private ServiceConnection serviceConnection = new ServiceConnection(){   
   //  连接服务失败后,该方法被调用   
  @Override   
  public void onServiceDisconnected(ComponentName name){   
       myService = null;   
       Toast.makeText(Main.this, "Service  Failed.", Toast.LENGTH_LONG).show();     
  }   
   
   //   成功连接服务后,该方法被调用。在该方法中可以获得MyService对象       
  @Override   
  public void onServiceConnected(ComponentName name, IBinder service){    
     //  获得MyService对象         
       myService = ((MyService.MyBinder)service).getService();          
       Toast.makeText(Main.this, "Service  Connected.", Toast.LENGTH_LONG).show() ;  
  } 
}; 
AIDL服务:

需要新建一个后缀名为.aidl的文件,该文件是一个接口文件,但是该文件内不能加修饰符(public,private等)

然后新建一个Service子类,在该类里面写一个内部类继承于IMyService.Stub(该文件是创建.aidl文件时自动生成的),实现,aidl内的抽象方法。

将onBind方法的返回改为继承于MyService.Stub子类的对象。

然后绑定服务,服务对象可以由语句获得myService = IMyService.Stub.asInterface(service);该方法会存在在onServiceConnected方法里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值