android Service控件

原创 2013年12月04日 09:48:42

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;
				}
			}
        });
    }
}

 

 

android控件22 Service

1

Android常用控件之悬浮窗(Service实现)

悬浮窗可以显示在所有应用程序之上,不管在PC机还是Android设备上都有这个,最常见的是360的“加速球” 来看下在Android设备上的效果 程序的目录结构如下图 创...

安卓四大控件之Service

Service介绍一个Serviceandroid 系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),也是一种应用程序组件,...

UI控件的初始显示状态与Service的存亡状态绑定

应用场景:   非常多啦,只要你这个控件会根据Service的运行状态改变内容,比如你一个按钮原始状态是“点击下载”,点击后显示“正在下载”,你不可能看着它下载吧,你得去其他Activity逛逛,逛...

Android插件化开发---运行未安装apk中的Service

http://blog.csdn.net/kymjs/article/details/40677357 如果你还不知道什么叫插件化开发,那么你应该先读一读之前写的这篇博客:Android插件...

Android 双开沙箱 VirtualApp 源码分析(四)启动插件 Service

上一章:Android 双开沙箱 VirtualApp 源码分析(三)App 启动原生 Service 创建过程首先有必要了解一下原生 framework 对 Service 的创建,因为在 VA 中...

Android动态部署五:如何从插件apk中启动Service

接下来我们通过分析Service启动流程来看看宿主apk如何启动Android四大组件之Service。...
  • ximsfei
  • ximsfei
  • 2016年04月06日 14:04
  • 3049

android service组件上显示toast插件

在做Service简单练习时,在Service中的OnCreate、OnStart、OnDestroy三个方法中都像在Activity中同样的方法调用了Toast.makeText,并在Acitivy...

Android插件化开发---运行未安装apk中的Service

如果你还不知道什么叫插件化开发,那么你应该先读一读之前写的这篇博客:Android插件化开发,初入殿堂         上一篇博客主要从整体角度分析了一下Android插件化开发的几个难点与动态加载没...
  • kymjs
  • kymjs
  • 2014年11月01日 08:56
  • 2738
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android Service控件
举报原因:
原因补充:

(最多只允许输入30个字)