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"/>
android 47 service绑定的更多相关文章
- Android -- Service绑定解绑和aidl
Service是安卓四大组件之一,先前讲到了Service的生命周期,以及非绑定类型的生命周期的例子,这次来分享一下绑定形式的. 应用组件(客户端)可以调用bindService()绑定到一个serv ...
- Android服务(Service)研究
Service是android四大组件之一,没有用户界面,一直在后台运行. 为什么使用Service启动新线程执行耗时任务,而不直接在Activity中启动一个子线程处理? 1.Activity会被用 ...
- Android中Service 使用详解(LocalService + RemoteService)
Service 简介: Service分为本地服务(LocalService)和远程服务(RemoteService): 1.本地服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外L ...
- Android中Service(服务)详解
http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...
- Android中Service的使用
我个人的理解是:我们平时使用的android系统的app的后台应用,就是这个原理 可以利用Service实现程序在后台运行,依照这个原理,可以通过Service来实现关键代码的运行与实现. <一 ...
- Android中Service深入学习
概述 1.当用户在与当前应用程序不同的应用程序时,Service可以继续在后台运行. 2.Service可以让其他组件绑定,以便和它交互并进行进程间通信. 3.Service默认运行在创建它的应用程序 ...
- 【Android 】Service 全面总结
1.Service的种类 按运行地点分类: 类别 区别 优点 缺点 应用 本地服务(Local) 该服务依附在主进程上, 服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外L ...
- Android 保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护
本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context ↳an ...
- Android 中Service生命周期
使用context.startService() 启动Service 其生命周期为context.startService() ->onCreate()- >onStart()->S ...
随机推荐
- 简单学C——第七天
函数 函数是C语言重要的组成部分,你现在,或者以后(如果C没什么变化的话)所写的任何一个C语言程序都是由一个一个的函数组合在一起的,当然,现在或许你只会在主函数 main中写一个小程序,那么在看了本篇 ...
- asp.net mvc jqgrid 同一个页面查询不同的表,jqgrid显示不同表的表头和数据并且分页
基于我上一篇文章<a href="http://www.cnblogs.com/alasai/p/4765756.html">asp.net mvc excel导入&l ...
- 关于if/else if
今天写存储过程的时候发现了个问题,就是在用if.elsif拼接sql的时候,得到的结果跟想象中 的不一样,大概描述是: 我传进去多个参数,然后判断每个字段是否为空,非空则将字段拼接上去,结果跟预料的 ...
- JSON取代XML?--JSON入门指南
定义 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C# ...
- hadoop的一些重要配置参数
hadoop集群管理内存设置 Mapreduce内存使用设置 hadoop job重要性能参数
- BZOJ 1003 物流运输trans
Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...
- Python 处理EXCEL的CSV文档分列求SUM
相对于导出EXCEL文件,PYTHON计算更为实时. import csv import sys from optparse import OptionParser def calculate_pro ...
- Hibernate之SchemaExport+配置文件生成表结构
首先要生成表,得先有实体类,以Person.java为例: /** * * @author Administrator * @hibernate.class table="T_Person& ...
- Scanner 与 Readable 的read()方法
Readable接口中的read()方法实现了将字符串读入charBuffer中,但是只有在需要输出的时候才会调用. Scanner是文本扫描器类,利用Scanner扫描并输出charBuffer中的 ...
- ORACLE数据缓冲区DB cache
DB CACHE是以数据块为单位组织的缓冲区,数据库刚刚启动的时候,DB CACHE中几乎没有用户数据的缓冲,当会话访问数据库中的表或索引时,首先会检查DB CACHE中是否存在该数据,如果不存在,就 ...