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");}@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubSystem.out.println("onBind");return new MyBinder();}@Overridepublic void onCreate() {// TODO Auto-generated method stubSystem.out.println("onCreate");super.onCreate();}@Overridepublic 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() {@Overridepublic void onServiceDisconnected(ComponentName name) {System.out.println("onServiceDisconnected");}@Overridepublic 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(){@Overridepublic 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(){@Overridepublic void onClick(View v) {if(flag){//取消绑定事件,会调用MyService的onUnbind()方法,但是不会调用onServiceDisconnected()这个方法,原因不明unbindService(conn);flag = false;}}        });    }}

更多相关文章

  1. androidの自定义控件View在Activity中使用findByViewId得到结果
  2. Android 获取蓝牙Mac地址的正确方法
  3. android 自定义边框
  4. 分析方法论探讨
  5. Android学习之自定义控件之图片带文字的View
  6. android 程序开发的插件化 模块化方法 之二
  7. Android自定义权限permission

随机推荐

  1. Android之触摸手势检测GestureDetector使
  2. android平台使用assert断言
  3. android 面试一
  4. [置顶] Android:自定义View实现水波进度效
  5. Rxjava+retrofit 添加公共请求参数及请求
  6. 适配器
  7. Kotlin学习之路
  8. 【Android(安卓)Training UI】创建自定义
  9. Android将String转化为ArrayList
  10. 实验三 数值积分(android)