如果一个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"/>

android 47 service绑定的更多相关文章

  1. Android -- Service绑定解绑和aidl

    Service是安卓四大组件之一,先前讲到了Service的生命周期,以及非绑定类型的生命周期的例子,这次来分享一下绑定形式的. 应用组件(客户端)可以调用bindService()绑定到一个serv ...

  2. Android服务(Service)研究

    Service是android四大组件之一,没有用户界面,一直在后台运行. 为什么使用Service启动新线程执行耗时任务,而不直接在Activity中启动一个子线程处理? 1.Activity会被用 ...

  3. Android中Service 使用详解(LocalService + RemoteService)

    Service 简介: Service分为本地服务(LocalService)和远程服务(RemoteService): 1.本地服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外L ...

  4. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  5. Android中Service的使用

    我个人的理解是:我们平时使用的android系统的app的后台应用,就是这个原理 可以利用Service实现程序在后台运行,依照这个原理,可以通过Service来实现关键代码的运行与实现. <一 ...

  6. Android中Service深入学习

    概述 1.当用户在与当前应用程序不同的应用程序时,Service可以继续在后台运行. 2.Service可以让其他组件绑定,以便和它交互并进行进程间通信. 3.Service默认运行在创建它的应用程序 ...

  7. 【Android 】Service 全面总结

    1.Service的种类 按运行地点分类: 类别 区别  优点 缺点   应用 本地服务(Local) 该服务依附在主进程上,  服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外L ...

  8. Android 保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护

    本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context  ↳an ...

  9. Android 中Service生命周期

    使用context.startService() 启动Service 其生命周期为context.startService() ->onCreate()- >onStart()->S ...

随机推荐

  1. ERP系统开发平台 (C#语言,支持多数据库)

    C/S系统开发框架-企业版 V4.0 (Enterprise Edition) 简介: http://www.csframework.com/cs-framework-4.0.htm 适用软件:适合开 ...

  2. Day17 表单验证、滚动菜单、WEB框架

    一.表单验证的两种实现方式 1.DOM绑定 <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  3. POJ 2049 Finding Nemo bfs 建图很难。。

    Finding Nemo Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 6952   Accepted: 1584 Desc ...

  4. 构建微服务:Spring boot

    构建微服务:Spring boot 在上篇文章构建微服务:Spring boot 提高篇中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jp ...

  5. io开发之C语言第二天

    开发环境是OS X系统下的Xcode Xcode的两个快捷键以及打开Xcode项目的正确方式 快捷键:command + B 编译 + 链接 快捷键:command + R 编译 + 链接 + 运行 ...

  6. Keras如何构造简单的CNN网络

    1. 导入各种模块 基本形式为: import 模块名 from 某个文件 import 某个模块 2. 导入数据(以两类分类问题为例,即numClass = 2) 训练集数据data 可以看到,da ...

  7. 对话机器学习大神Yoshua Bengio(下)

    对话机器学习大神Yoshua Bengio(下) Yoshua Bengio教授(个人主页)是机器学习大神之一,尤其是在深度学习这个领域.他连同Geoff Hinton老先生以及 Yann LeCun ...

  8. dispatch_semaphore

    dispatch_semaphore 信号量基于计数器的一种多线程同步机制.在多个线程访问共有资源时候,会因为多线程的特性而引发数据出错的问题. dispatch_queue_t queue = di ...

  9. clang: error: invalid deployment target for -stdlib=libc++ (requires iOS 5.0 or later)

    低于5.0版本的不支持设置成 或 在Xcode中做如下配置 静态库工程也要做同样设置

  10. js图片预览插件,不涉及上传

    小小的几十行代码,很牛逼,很实用. 支持多个图片的预览,只要new多个对象就行了. html如下 <!-- zhouxiang www.zhou-xiang.com --> <!DO ...