zoukankan      html  css  js  c++  java
  • 如何启动Service,如何停用Service(转)

    如何启用Service,如何停用Service

      Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发现,可以使用它开发如监控之类的程序。服务的开发比较简单,如下:

      第一步,继承Service类

        public class SMSService extends Service{

          }

      第二步:在AndroidManifest.xml文件中的<application>节点里对服务进行配置:

        <service android:name=".SMSService"/>

       服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法 都可以启动Service,但是他们的使用场合有所不同。使用startService方法启动服务,调用者和服务之间没有关联,即是调用者退出了,服务 仍然运行。使用bindService()方法启动服务,调用者和服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特 点。

      如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的 onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用 startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。采用startService方法启动的服务,只能 调用Context.stopService()方法结束服务,服务结束时会调用onDestory()方法。

      如果打算采用 Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方 法。这个时候调用者和服务绑定在一起,调用者退出了,系统会先调用服务的onUnbind()方法,接着调用onDestory()方法。如果调用 bindService()方法之前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说 onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方 法,调用该方法也会导致系统调用服务的onUnbind()->onDestory()方法。

      服务常用生命周期回调方法如下:
    onCreate() 该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次 startService() 或bindService() 方法,服务也只被创建一次。
    onDestroy() 该方法在服务被终止时调用。

      与采用 Context.startService() 方法启动服务有关的生命周期方法
    onStart() 只有采用 Context.startService() 方法启动服务时才会回调该方法。该方法在服务开始运行时被调用。多次调用 startService() 方法尽管不会多次创建服务,但 onStart() 方法会被多次调用。

      与采用 Context.bindService() 方法启动服务有关的生命周期方法
    onBind() 只有采用 Context.bindService() 方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用 Context.bindService() 方法并不会导致该方法被多次调用。

      onUnbind() 只有采用 Context.bindService() 方法启动服务时才会回调该方法。该方法在调用者与服务解除绑定时被调用。

      采用Context.startService()方法启动服务的代码如下:

     1 public class HelloActivity extends Activity{
     2     @Override
     3     public void onCreate(Bundle savedInstanceState){
     4     ......
     5     Button button=(Button)this.findViewById(R.id.button);
     6     button.setOnClickListener(new View.OnClickListener(){
     7         public void onClick(View v){
     8          Intent intent=new Intent(HelloActivity.this,SMSService.class);
     9             startService(intent);
    10         }});
    11     }
    12    }

      采用Context.bindService()方法启动服务的代码如下:

     1 public class HelloActivity extends Activity{
     2     ServiceConnection conn=new ServiceConnection(){
     3         public void onServiceConnected(ComponentName name,IBinder service){ }
     4         public void onServiceDisconnected(ComponentName name{ }
     5     };
     6     @Override
     7     public void onCreate(Bundle saveInstanceState){
     8         Button button=(Button)this.findViewById(R.id.button);
     9         button.setOnClickListener(new View.OnClickListener(){
    10             public void onClick(View v){
    11              Intent intent=new Intent(HelloActivity.this,SMSService.class);
    12              bindService(intent,conn,Context.BIND_AUTO_CREATE);
    13             //unbindService(conn);//解除绑定
    14         }});
    15     }
    16 }
  • 相关阅读:
    sublime 设置侧边栏颜色
    laravel 连接mongodb
    PHP empty(),isset()与is_null()的实例测试
    ubuntu 14.04 64位安装 深度截图
    ubuntu 14.04 64位安装 lightworks (解决libtiff4依赖)
    ubuntu LAMP 配置
    一个查询大学英语四六级的类
    jstree 权限树 简单教程
    对接ebay,订单系统开发
    常用的PHP判断 检测 函数.
  • 原文地址:https://www.cnblogs.com/dazuihou/p/3580660.html
Copyright © 2011-2022 走看看