如果一个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. [CSS]列表属性(List)

      CSS 列表属性(List) 属性 描述 CSS list-style 在一个声明中设置所有的列表属性. 1 list-style-image 将图象设置为列表项标记. 1 list-style- ...

  2. css3百叶窗轮播图效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. deep learning framework(不同的深度学习框架)

    常用的deep learning frameworks 基本转自:http://www.codeceo.com/article/10-open-source-framework.html 1. Caf ...

  4. 有关collection中的一些数据结构

    Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素 ...

  5. javascript学习代码--点击按钮显示内容

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 如何使用GCD(ZZ)

    什么是GCD?       Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法.该方法在Mac OS X 10.6雪豹中首次推出,并随后被引入到了iOS4 ...

  7. DragSortListView学习总结

    Drag-sort-listview 是一个支持拖拽排序和左右滑动删除功能的自定义ListView,重写了 TouchInterceptor类来提供更加优美的拖拽动画效果. DSLV主要特性: 完美的 ...

  8. div 背景色设置_DIV背景颜色设置

    DIV 背景色设置篇-div背景颜色设置篇 一.div标签内直接设置背景颜色   -   TOP <div style="background:#000; color:#FFF&quo ...

  9. 在前台运行Service

    一个前台的 service是被用户强烈关注的从而不会在内存低时被系统杀死.前台 service必须在状态栏上提供一个通知,这个通知被放在"正在进行"区域中,这表示这个通知不能被解除,除非服务停止了或者 ...

  10. 14.7.1 Resizing the InnoDB System Tablespace InnoDB 系统表空间大小

    14.7.1 Resizing the InnoDB System Tablespace InnoDB 系统表空间大小 这个章节描述如何增加或者减少 InnoDB 系统表空间的大小 增加InnoDB ...