当前位置:操作系统 > 安卓/Android >>

android servicelifecycle 服务的生命周期和程序内部调用服务

创建服务类:创建MyService类继承Service,其中内部类IServiceImpl继承系统的binder类 和实现自定义接口IService

IService提供外部调用的方法:

[java] 
package com.example.serverlifecycle; 
 
public inte易做图ce IService { 
    public void callMethodInService(); 

系统的binder类实现了IBinder接口.在创建的服务类重写父类的onBind方法中返回实现了binder类和继承iservice的类的一个对象.在实现了binder的类中重写IService接口中的方法,调用在实现了service的类中的方法.这样就能达到调用绑定服务的方法.可以获取服务中的数据.只有绑定的服务才能获取服务数据
service业务类:
[java]
package com.example.serverlifecycle; 
 
import android.app.Service; 
import android.content.Intent; 
import android.os.Binder; 
import android.os.IBinder; 
 
/**
 * 服务的开启方法<br>
 * 1:开启方法startService(intent)/stopService(intent)<br>
 * 2:绑定服务bindService(intent, conn, Context.BIND_AUTO_CREATE)/unbindService(conn)
 * 区别:开启服务,服务一旦开启,与调用者没有任何关系,调用者的activity即使是退出了.也不会影响后台service的运行,
 * 在activity里不能使用服务的方法<br>
 * 绑定服务,通过绑定开启的服务,服务跟调用者不求同生但求同死,如果调用者的activity退出了(或者在当前的activity点击返回按钮),
 * 那它绑定的服务也回跟着退出,绑定方式开启的服务,是可以在activity中调用服务的方法<br>
 * 
 * @author Administrator
 * 
 */ 
public class MyService extends Service { 
 
    @Override 
    /**
     * 绑定时调用的方法,如果服务不存在,就执行onCreate方法创建服务,然后执行onBind方法绑定服务,之后再执行onBind方法就没效果了
     */ 
    public IBinder onBind(Intent intent) { 
        // IBinder 继承了Binder 
        System.out.println("onBind"); 
        return new IServiceImpl();// 返回自定义的继承了binfer类(等于也实现了IBinder)和实现了IService类的一个对象 
    } 
 
    /**
     * 服务里面的方法
     */ 
    public void sayHelloInService() { 
        System.out.println("hello service"); 
    } 
 
    /**
     * Binder实现了IBinder接口,IServiceImpl有继承了Binder,等于是IServiceImpl也实现了IBinder方法
     * IService 自己定义的接口
     * 
     * @author Administrator
     * 
     */ 
    public class IServiceImpl extends Binder implements IService { 
 
        @Override 
        public void callMethodInService() { 
            sayHelloInService(); 
        } 
 
    } 
 
    @Override 
    /**
     * 解除绑定调用的方法,调用了onUnbind方法后会跟着调用onDestroy方法,解除服务之后结束服务<br>
     * 绑定的服务职能解除一次,如果多次解除服务,程序会有异常
     */ 
    public boolean onUnbind(Intent intent) { 
        // TODO Auto-generated method stub 
        System.out.println("onUnbind"); 
        return super.onUnbind(intent); 
    } 
 
    @Override 
    /**
     * 只有在第一次启动服务或者调用了onDestroy之后再中心开启服务才会调用onCreate
     */ 
    public void onCreate() { 
        super.onCreate(); 
        System.out.println("onCreate"); 
    } 
 
    @Override 
    /**
     * 停止一个服务
     */ 
    public void onDestroy() { 
        super.onDestroy(); 
        System.out.println("onDestroy"); 
    } 
 
    @Override 
    /**
     * 开始一个服务
     */ 
    public void onStart(Intent intent, int startId) { 
        super.onStart(intent, startId); 
        System.out.println("onStart"); 
    } 

在配置文件中的application标签中注册上面的服务类
[html] 
<service android:name="MyService" /> 
创建布局文件:

[html]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
 
    <Button 
        android:id="@+id/start" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="启动服务" /> 
 
    <Button 
        android:id="@+id/end" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="停止服务" /> 
 
    <Button 
        android:id="@+id/startBindService" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="绑定服务" /> 
 
    <Button 
        android:id="@+id/endBindService" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
    

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,