android 47 service绑定

简介:
如果一个service已经启动了,activity和service绑定了在解除邦定,则这个service不会销毁,因为这个service不是这个Activity创建的。

 service生命周期:

Activity绑定的同时创建service则解除绑定的时候service销毁。

main.xml:

复制代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btnStartService"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="start service" />

    <Button
        android:id="@+id/btnBindService"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="bind service" />

    <Button
        android:id="@+id/btnUnbindService"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="unBind service" />

</LinearLayout>
复制代码

mainACtivity.java

复制代码
package com.sxt.day07_03;

import com.sxt.day07_03.MyService.MyBinder;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity {
    MyBinder mBider;
    Intent mIntent;
    private ServiceConnection conn=new ServiceConnection() {//conn是接口类型
        @Override
        //绑定后由于异常被迫解除绑定时调用。
        public void onServiceDisconnected(ComponentName name) {
        }
        @Override
        //绑定成功Service的onBind方法执行后调用,已经绑定成功再绑定是不会调用这个方法的,并接收onBind方法的返回值(传过来的是地址是同一个对象,要实现IBinder接口)
        public void onServiceConnected(ComponentName name, IBinder service) {
            mBider=(MyBinder) service;
            Log.i("main",service.toString()+",count:"+mBider.getCount());//返回11
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setListener();
    }

    private void setListener() {
        setStartServiceClickListener();
        bindServiceClickListener();
        unBindServiceClickListener();
    }

    private void unBindServiceClickListener() {
        findViewById(R.id.btnUnbindService).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mIntent==null){
                    return ;
                }
                unbindService(conn);
            }
        });
    }

    private void bindServiceClickListener() {
        findViewById(R.id.btnBindService).setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                mIntent=new Intent(MainActivity.this, MyService.class);
                bindService(mIntent, conn, Context.BIND_AUTO_CREATE);//conn是绑定成功时候回调的接口的实现类,BIND_AUTO_CREATE表示如果没有启动则连绑定再启动。
            }
        });
    }

    private void setStartServiceClickListener() {
        findViewById(R.id.btnStartService).setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                mIntent=new Intent(MainActivity.this, MyService.class);
                startService(mIntent);
            }
        });
    }

}
复制代码

service.java

复制代码
package com.sxt.day07_03;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;

public class MyService extends Service {
    private int mCount=10;
    @Override
    //绑定成功的时候调用,已经绑定成功再绑定是不会调用这个方法的。
    public IBinder onBind(Intent intent) {
        MyBinder binder=new MyBinder();
        return binder;
    }
    class MyBinder extends Binder{//这里继承Binder类而不是IBinder接口,因为继承接口会重写方法,是不必要的。
        public int getCount(){
            return ++mCount;
        }
    }
    @Override
    public void onCreate() {//创建的时候调用,先创建再绑定。
        super.onCreate();
        Log.i("main","onCreate()");
    }
    
    @Override
    public boolean onUnbind(Intent intent) {
        Log.i("main","onUnbind");
        return true;//想解除绑定后再绑定则返回true,onUnbind方法执行后并执行onRebind方法
    }
    
    @Override
    public void onRebind(Intent intent) {//解除绑定后再绑定执行这个方法
        super.onRebind(intent);
        Log.i("main","onRebind()");
    }
    
    @Override
    public void onDestroy() {//如果这个Activity创建的这个service,则解绑的时候会调用onDestroy方法,如果不是这个Activity创建的则解绑的时候不会销毁这个service,因为不是他创建的。
        super.onDestroy();
        Log.i("main","onDestroy()");
    }
}
复制代码

 安卓的4大组件在自定义的时候都要在说明文件声明.

说明文件要添加:<service android:name="com.sxt.day07_03.MyService"/>


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4890685.html,如需转载请自行联系原作者


相关文章
|
4月前
|
XML Java Android开发
Android Studio App开发之服务Service的讲解及实战(包括启动和停止,绑定与解绑,推送服务到前台实现音乐播放器,附源码)
Android Studio App开发之服务Service的讲解及实战(包括启动和停止,绑定与解绑,推送服务到前台实现音乐播放器,附源码)
105 0
|
2月前
|
数据可视化 Android开发
[Android 四大组件] --- Service
[Android 四大组件] --- Service
24 0
|
8月前
|
Android开发
Android手写占位式插件化框架之Activity通信、Service通信和BroadcastReceiver通信(一)
Android手写占位式插件化框架之Activity通信、Service通信和BroadcastReceiver通信
68 0
|
8月前
|
Android开发
Android 四大组件之Service的详解
Android 四大组件之Service的详解
81 0
|
8月前
|
数据库 Android开发 开发者
Android 开发四大组件(Activity、Service、Broadcast Receiver、Content Provider)
Android 开发四大组件(Activity、Service、Broadcast Receiver、Content Provider)
104 0
|
10月前
|
XML 传感器 缓存
Android:四大组件之 Service
Service 是 Android 中实现程序后台运行的解决方案,它非常适合用于去执行那些不需要和用户交互而且还要求长期运行的任务。但不要被“后台”二字迷惑,Service 默认并不会运行在子线程中,它也不会运行在一个独立的进程中,它同样执行在 UI 线程中,因此,不要在 Service 中执行耗时的操作,除非你在 Service 中创建子线程来完成耗时操作。
94 0
Android:四大组件之 Service
|
Java 调度 Android开发
android Service中Thread.sleep不精确
android Service中Thread.sleep不精确
138 0
|
Android开发
android 无法绑定 1024 以下端口
android 无法绑定 1024 以下端口
80 0
|
Android开发
深入剖析Android四大组件(二)——Service服务之启动与绑定(二)
深入剖析Android四大组件(二)——Service服务之启动与绑定(二)
216 1
深入剖析Android四大组件(二)——Service服务之启动与绑定(二)
|
Android开发
深入剖析Android四大组件(二)——Service服务之启动与绑定(一)
深入剖析Android四大组件(二)——Service服务之启动与绑定(一)
167 0
深入剖析Android四大组件(二)——Service服务之启动与绑定(一)