Android——Service

来源:互联网 发布:ubuntu启动脚本编写 编辑:程序博客网 时间:2024/06/06 09:15
  • 长期在后台运行,如接收推送消息,在锁屏状态下监听传感器信息
     在外界执行StartService(new Intent(MainActvity.this,MyAty.class));时,会执行onCreate()和onStartCommand(Intent i,int flags,int startId){    }
     public class MyService extends Service {
         public IBinder onBind(Intent i){  //与活动通信
               return null;
          
          public void onCreate(){     //会在服务创建的时候调用
               super.onCreate();
          }
          public int onStartCommand(Intent i,int flags,int startId){   //服务每次启动的时候都会调用
               return super.onStartCommand(i,flags,startId);
          }
          public void onDestory(){  //服务在销毁的时候调用
               super.onDestory();
          }
     }
  • 可通过绑定服务来启动服务bindService
  • Service的生命周期
     一旦项目的任何位置调用了Context的startService()方法,相应的服务就开始启动了,并回调onStartCommand()方法。如果这个服务之前没有创建过,onCreate()方法会先于onStartCommand()方法执行。服务启动后会一直保持运行状态,直到stopService()或stopSelf()方法被调用。注意:虽然每调用一次startService()方法,onStartCommand()方法就会执行一次,但实际上每个服务都只会存在一个实例。所以不管你调用了多少次startService(),只需要调用一次stopService()或stopSelf()方法,服务就会停止
     可以调用Context的bindService()来获取一个服务的持久的连接,这是就会回调服务中的onBind()方法。如果这个服务之前还没有创建过,则onCreate()方法先于onBind()执行。调用方可以获取到onBind()方法里返回的IBinder对象的实例,这样就可以自由的和服务进行通信了。只要调用方和服务之间的连接没有断开,服务就会一直保持运行状态
     当调用了startService()方法以后,又去调用stopService()方法,这是服务的onDestory()方法就会执行,表示服务已经销毁了。
     当调用了bindService()方法以后,去调用unbindService()方法,onDestory()方法就会执行。
     但是,需要注意的是我们完全有可能对一个服务既调用了startService(),又调用了bindService()方法,这种情况下,要同时调用stopService()和unbindService()方法,onDestory()方法才会执行,服务才会停止。
  • 服务有两种状态,一种是启动状态,一种是绑定状态。
     处于启动状态时,做一些后台计算,不需要与外界有直接的交互,尽管这是的service是用于后台计算的,但本身是运行在主线程中的,因此耗时的计算需要在单独的线程中完成。
     处于绑定状态时,同样可以进行内部计算,但是处于这种状态时,外界可以更好的与Service进行通信。
0 0
原创粉丝点击