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

从头学Android之Service初步二

 

在上一篇,我们学习了通过startService来启动Service,由于篇幅过长,所以这一篇是接上一篇的

二、bindService方法启动Service

先看bindSerivce(Intent service,ServiceConnection conn,int flags)函数

参数说明:

service:通过该参数也就是Intent我们可以启动指定的Service

conn:该参数是一个ServiceConnection对象,这个对角用于监听访问者(也可以说成是客户端)与Service之间的连接情况,当访问者与Service连接成功时将回调ServiceConnection对象的onServiceConnected(ComponentName name,Ibinder service)方法;如果断开将回调onServiceDisConnected(CompontName name)方法

flags:指定绑定时是否自动创建Service。

步骤:

1、  新建一个类继承于Service类,重写onBind()、onCreate()、onUnBind()、onDestory()方法。再在这个类里声明一个Ibinder的子类对象用于提供于客户端,同时可以定义一些成员变量,客户端可以获取到这个成员变量属性

2、  在AndroidMainfest.xml文件中注册这个Service

3、  在Activity里通过bindService绑定Service

示例代码:

 

 

package com.jiahui.serviceDemo; 

 

import android.app.Service; 

import android.content.Intent; 

import android.os.Binder; 

import android.os.IBinder; 

 

public class MyService extends Service { 

 

    private int count; 

 

    private boolean quit; 

 

    private MyBinder binder = new MyBinder(); 

 

    // 新建一个Binder对象用于提供给客户端 

    public class MyBinder extends Binder { 

 

        public int getCount() { 

            return count; 

        } 

    } 

 

    @Override 

    public IBinder onBind(Intent intent) { 

        System.out.println("----onBind-----"); 

        // 返回给客户端一个Binder对象 

        return binder; 

    } 

 

    @Override 

    public void onCreate() { 

        System.out.println("----onCreate-----"); 

 

        // 启动一条线程修改成员变量属性 

        new Thread() { 

            @Override 

            public void run() { 

                while (!quit) { 

                    try { 

                        Thread.sleep(1000); 

                    } catch (Exception e) { 

                     

                    } 

                    count++; 

                } 

            } 

 

        }.start(); 

 

    } 

 

    @Override 

    public void onDestroy() { 

        this.quit = true; 

        System.out.println("----onDestory-----"); 

        super.onDestroy(); 

    } 

 

    @Override 

    public boolean onUnbind(Intent intent) { 

        System.out.println("----onUnbind-----"); 

        return super.onUnbind(intent); 

    } 

 

 

 

 

MainActivty

 

package com.jiahui.serviceDemo; 

 

import android.app.Activity; 

import android.content.ComponentName; 

import android.content.Intent; 

import android.content.ServiceConnection; 

import android.os.Bundle; 

import android.os.IBinder; 

import android.view.View; 

import android.widget.Button; 

import android.widget.Toast; 

 

public class MainActivity extends Activity { 

 

    private Button btnBind; 

    private Button btnUnBind; 

    private Button btnGetData; 

 

    MyService.MyBinder binder; 

    // 定义一个ServiceConnection对象 

    private ServiceConnection conn = new ServiceConnection() { 

 

        // 当客户端与Service断开连接时 

        @Override 

        public void onServiceDisconnected(ComponentName name) { 

            System.out.println("---onServiceDisconnected----"); 

 

        } 

 

        // 当客户端与Service建立连接时 

        @Override 

        public void onServiceConnected(ComponentName name, IBinder service) { 

            System.out.println("---onServiceConnected----"); 

            binder = (MyService.MyBinder) service; 

        } 

    }; 

 

    public void onCreate(Bundle savedInstanceState) { 

         

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.main); 

 

        btnBind = (Button) findViewById(R.id.btnBind); 

        btnUnBind =

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