bindService的生命周期与其启动时使用的Context有关
2016-03-19 17:41
495 查看
Context种类
笼统的说分两种,全局的和非全局的,Activity和Service是非全局的,BroadcastReceiver和getApplication()拿到的是全局的使用全局Context的bindservice,Activity销毁时不会被销毁
package org.crazyit.service; import android.app.Activity; import android.app.Service; 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.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; /** * Description: <br/> * site: <a href="http://www.crazyit.org">crazyit.org</a> <br/> * Copyright (C), 2001-2012, Yeeku.H.Lee <br/> * This program is protected by copyright laws. <br/> * Program Name: <br/> * Date: * * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */ public class MainActivity extends Activity { Button bind, unbind, getServiceStatus; // 保持所启动的Service的IBinder对象 BindService.MyBinder binder; // 定义一个ServiceConnection对象 private ServiceConnection conn = new ServiceConnection() { // 当该Activity与Service连接成功时回调该方法 @Override public void onServiceConnected(ComponentName name, IBinder service) { System.out.println("--Service Connected--"); // 获取Service的onBind方法所返回的MyBinder对象 binder = (BindService.MyBinder) service; } // 当该Activity与Service断开连接时回调该方法 @Override public void onServiceDisconnected(ComponentName name) { System.out.println("--Service Disconnected--"); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获取程序界面中的start、stop、getServiceStatus按钮 bind = (Button) findViewById(R.id.bind); unbind = (Button) findViewById(R.id.unbind); getServiceStatus = (Button) findViewById(R.id.getServiceStatus); // 创建启动Service的Intent final Intent intent = new Intent(); // 为Intent设置Action属性 intent.setAction("org.crazyit.service.BIND_SERVICE"); bind.setOnClickListener(new OnClickListener() { @Override public void onClick(View source) { // 绑定指定Serivce getApplication().bindService(intent, conn, Service.BIND_AUTO_CREATE); } }); unbind.setOnClickListener(new OnClickListener() { @Override public void onClick(View source) { // 解除绑定Serivce unbindService(conn); } }); getServiceStatus.setOnClickListener(new OnClickListener() { @Override public void onClick(View source) { // 获取、并显示Service的count值 Toast.makeText(MainActivity.this, "Serivce的count值为:" + binder.getCount(), 4000).show(); //打开新页面并销毁自己 startActivity(new Intent(MainActivity.this, MainActivity.class)); MainActivity.this.finish(); } }); } }
使用getApplication().bindService,然后在新页面中再bindservice:
可以看到activity销毁后,service并没有被销毁
使用默认的bindService,然后在新页面中再bindservice:
可以看到activity销毁后,service也被销毁了
相关文章推荐
- 单元测试
- vmware中centOs系统安装vmware tools
- 测试很重要
- Java反射机制<2>
- iOS 开发学习
- AngularJS 单路由多视图(Multiple Named Views)
- 第一天 POJ 1753
- 处理某个json文件的代码
- 第4周-项目3-(1)猜数字游戏
- 算复利条件下等额还款金额
- 求一个整数的平方和立方
- ios测试简介
- 详解Unity 4.6新UI的布局
- 英语歌曲:Cry on My Shoulder(在我肩上哭泣)
- C/C++编译和链接过程详解 (重定向表,导出符号表,未解决符号表)
- 内存管理范围和@property
- 对代码的分析
- 逆光
- solr5.3+tomcat-7.0.65+IKAnalyzer分词
- 英语歌曲:Can't Stop Love