当前位置: 首页 > news >正文

android Service控件

1、Service是一个应用程序的组件
2、Service没有图形化界面
3、用来处理耗时比较长的功能(下载、播放MP3)
4、更新ContentProvider、Intent以及系统的启动

 

Servcie不是一个单独的进程,不是一个线程

 

定义一个Service比较简单,只要继承Service类,实现其生命周期的方法即可。一个定义好的Service必须在AndroidManifest.xml文件中通过<service>声明才能使用

 

<service android:name="MyService">
	<intent-filter>
		<action android:name="hb.com.MYSERVICE"/>
	</intent-filter>
</service>

 

备注:MyService一定要是继承了Service类的,并且名称和类名是一致的
action的名称是自定义的,只要在bindService或者操作Intent的时候就能够被捕获

 

public class MyService extends Service {
	public class MyBinder extends Binder{
		public MyService getMyService(){
			return MyService.this;
		}
	}
	public void test(){
		System.out.println("test");
	}
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		System.out.println("onBind");
		return new MyBinder();
	}
	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		System.out.println("onCreate");
		super.onCreate();
	}
	@Override
	public boolean onUnbind(Intent intent) {
		System.out.println("I am unbind");
		return super.onUnbind(intent);
	}
}

  

 

public class MainActivity extends Activity {
	
	private static final String MYSERVICE = "hb.com.MYSERVICE"; 
	private boolean flag = false;
	//bindService()方法需要ServiceConnection接口作为参数,所以定义了这个变量,目的是为了实现里面的两个方法
	ServiceConnection conn = new ServiceConnection() {
		@Override
		public void onServiceDisconnected(ComponentName name) {
			System.out.println("onServiceDisconnected");
		}
		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			System.out.println("onServiceConnected");
			MyBinder myBinder = (MyBinder)service;
			MyService myService = myBinder.getMyService();
			myService.test();
		}
	};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        findViewById(R.id.start).setOnClickListener(new Button.OnClickListener(){
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setAction(MYSERVICE);
				//先调用MyService的onCreate()方法,然后调用onBind()方法,最后调用onServiceConnected()方法
				//因此IBinder返回的值就是通过onBind()方法返回的对象,定义getMyService()方法是为了得到MyService对象,用户在这个类中添加自己需要的一些方法,这样可以做一些逻辑处理
				bindService(intent, conn, Service.BIND_AUTO_CREATE);
				flag = true;
			}
        });

        findViewById(R.id.stop).setOnClickListener(new Button.OnClickListener(){
			@Override
			public void onClick(View v) {
				if(flag){
					//取消绑定事件,会调用MyService的onUnbind()方法,但是不会调用onServiceDisconnected()这个方法,原因不明
					unbindService(conn);
					flag = false;
				}
			}
        });
    }
}

 

 

转载于:https://www.cnblogs.com/hbiao68/archive/2012/01/02/2309799.html

相关文章:

  • 当DiscuzNT遇上了Loadrunner(中)
  • Oracle数据字典
  • HDU_2196 Computer (树型dp)
  • 如何选购无线路由器
  • vs2005 vs2008中使用wince5.0 sdk 仿真器
  • 趋势畅想-搭载android系统的智能数码相机
  • abr-summary 和asbr-summary命令中的not-advertise参数
  • 在Non-Mfc下使用CString
  • Hadoop 分布式文件系统 - HDFS
  • ipcs 命令详解
  • 典型开源3D引擎分类比较
  • NFS服务器的搭建
  • Linux(RHEL6.0)下安装GCC
  • c# Excel
  • Operations Manager 2007 R2系列之邮件通知
  • 【译】JS基础算法脚本:字符串结尾
  • __proto__ 和 prototype的关系
  • 2017年终总结、随想
  • Apache Pulsar 2.1 重磅发布
  • cookie和session
  • Java编程基础24——递归练习
  • Java教程_软件开发基础
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • PHP的类修饰符与访问修饰符
  • sessionStorage和localStorage
  • Vue小说阅读器(仿追书神器)
  • vue自定义指令实现v-tap插件
  • 构造函数(constructor)与原型链(prototype)关系
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 如何进阶一名有竞争力的程序员?
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 如何在 Tornado 中实现 Middleware
  • 三栏布局总结
  • 少走弯路,给Java 1~5 年程序员的建议
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 移动端 h5开发相关内容总结(三)
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • const的用法,特别是用在函数前面与后面的区别
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • (2)Java 简介
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • *** 2003
  • .jks文件(JAVA KeyStore)
  • .NET 常见的偏门问题
  • .Net6 Api Swagger配置
  • ?.的用法
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [AX]AX2012 SSRS报表Drill through action
  • [C++打怪升级]--学习总目录
  • [corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [ERROR] ocp-server-ce-py_script_start_check-4.2.1 RuntimeError: ‘tenant_name‘