一、使用Service

1、什么是Service以及Service的配置项:

  Service是Android组件的一种,派生自android.app.service类。它不提供交互界面,只是在后台运行,进行功能调度或提供数据支持。

  <!--android:enabled—是否启用,android:exported—是否导出-->
  <service android:name=".MyService" android:enabled="true"  android:exported="true"></service>

2、启动/停止Service(MainActivity.java)

    public class MainActivity extends AppCompatActivity {
      private Intent intent;  // Intent只是用来配置程序要启动service的信息

      @Override
      protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        intent = new Intent(MainActivity.this,MyService.class);  // 服务的实例在一个操作系统上只有一个
        findViewById(R.id.btnStartService).setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            startService(intent); //启动服务
          }
        });
        findViewById(R.id.btnStopService).setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            stopService(intent); //停止服务
          }
        });
      }
    }

3、onStartCommand方法(MyService类继承自Service)

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {  //在外界执行了StartService后执行
      new Thread(){
        @Override
        public void run() {
          super.run();
          while (true){
            System.out.println("服务正在运行...");
          try {
            sleep(1000);  //休眠一秒
            } catch (InterruptedException e) {
              e.printStackTrace();
            }
          }
        }
      }.start();
      return super.onStartCommand(intent, flags, startId);
    }  
二、绑定Service(启动服务可以使用绑定服务的方式来启动

1、多个按钮都要实现监听功能(MainActivity.java)

    findViewById(R.id.btnStartService).setOnClickListener(this);
    findViewById(R.id.btnStopService).setOnClickListener(this);
    findViewById(R.id.btnBindService).setOnClickListener(this);
    findViewById(R.id.btnUnbindService).setOnClickListener(this);

    @Override
    public void onClick(View v) {
      switch(v.getId()){
        case R.id.btnStartService:
          startService(intent);
          break;
        case R.id.btnStopService:
          stopService(intent);
          break;
        case R.id.btnBindService:   //第二个参数this表示服务的链接,侦听服务的状态
          bindService(intent,this, Context.BIND_AUTO_CREATE);
          break;
        case R.id.btnUnbindService:
          unbindService(this);
          break;
      }
    }
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {  //服务被绑定成功后执行
      System.out.println("Service Connected");
    }
    @Override
    public void onServiceDisconnected(ComponentName name) {  //服务所在进程奔溃或杀掉时执行  }

2、MyService.java:

    @Override
    public IBinder onBind(Intent intent) {
      return new Binder();  //实现了IBinder接口
    }

三、Service生命周期

1、服务的生命周期主要有两个,分别是创建(onCreate)和销毁(onDestroy)。

    public int onStartCommand(Intent intent, int flags, int startId) {   //点击启动服务按钮,onStartCommand会不断重复执行
      System.out.println("onStartCommand");
      return super.onStartCommand(intent, flags, startId);
    }
    public void onCreate() {  //点击启动服务按钮,onCreate会执行一次
      super.onCreate();
      System.out.println("Service create");
    }
    public void onDestroy() {
      super.onDestroy();
      System.out.println("Service destroy");
    }

  (同时启动服务并绑定服务时,必须同时停止服务并解除绑定服务。

   启动服务后退出Activity,并不会销毁程序,但是,如果Activity和Service绑定,退出Activity,会取消同Service的绑定。)

2、Service小程序(MyService.java)

    private boolean serviceRunning = false;
    public void onCreate() {
      super.onCreate();
      System.out.println("Service create");
      serviceRunning = true;
      new Thread(){
        @Override
        public void run() {
          super.run();
          while (serviceRunning){
            System.out.println("服务正在运行...");
            try {
              sleep(1000); //休眠一秒
              } catch (InterruptedException e) {
                e.printStackTrace();
                }
              }

        }
      }.start();
    }
    public void onDestroy() {
      super.onDestroy();
      System.out.println("Service destroy");
      serviceRunning = false;

    }

认识Android Service的更多相关文章

  1. android service两种启动方式

    android service的启动方式有以下两种: 1.Context.startService()方式启动,生命周期如下所示,启动时,startService->onCreate()-> ...

  2. 1、Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco

    Android studio 集成极光推送(Jpush) (华为手机)报错, E/JPush: [JPushGlobal] Get sdk version fail![获取sdk版本失败!] W/Sy ...

  3. Android Service完全解析,关于服务你所需知道的一切(下)

    转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在上一篇文章中,我们学习了Android Service相关的许多重要 ...

  4. Android Service完全解析,关于服务你所需知道的一切(上)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...

  5. android service 的各种用法(IPC、AIDL)

    http://my.oschina.net/mopidick/blog/132325 最近在学android service,感觉终于把service的各种使用场景和用到的技术整理得比较明白了,受益颇 ...

  6. Android service介绍和启动方式

    1.Android service的作用: service通常是用来处理一些耗时操作,或后台执行不提供用户交互界面的操作,例如:下载.播放音乐. 2.Android service的生命周期: ser ...

  7. Android Service初始

    一.Service概念 1.Service是一个应用程序组件 2.Service没有图像化界面 3.Service通常用来处理一些耗时比较长的操作 4.可以使用Service更新ContentProv ...

  8. Android Service与Thread的区别

    Android Service,后台,Android的后台就是指,它的运行是完全不依赖UI的.即使Activity被销毁,或者程序被关闭,只要进程还在,Service就可以继续运行.比如说一些应用程序 ...

  9. Android service binder aidl 关系

    /********************************************************************************** * Android servic ...

  10. Android Service AIDL 远程调用服务 【简单音乐播放实例】

    Android Service是分为两种: 本地服务(Local Service): 同一个apk内被调用 远程服务(Remote Service):被另一个apk调用 远程服务需要借助AIDL来完成 ...

随机推荐

  1. MVC中部分视图调用方法总结

    部分视图不走  controller @Html.Partial(“_Menu”);  //这种是不走Controller的,直接在加载_Menu的视图 @Html.Partial(“_Menu”, ...

  2. background-attachment属性进阶

    前提是定义了background-image属性,然后用background-attachment来指明背景图的位置是固定于视口的,还是随着包含块移动的.可简单理解为定义背景图片随滚动轴的移动方式. ...

  3. JAVA中整型的存储和左右移位运算

    byte,1个字节8位, -128 ~ 127之间,首位表示正负,0为正,1为负,0111,1111表示127,-127为127取反1000,0000,再加1,即1000,0001为-127,-127 ...

  4. [No000091]SVN学习笔记2-TortoiseSVN Client初级操作update(获取)、commit(提交)

    SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...

  5. poj 2352 Stars 数星星 详解

    题目: poj 2352 Stars 数星星 题意:已知n个星星的坐标.每个星星都有一个等级,数值等于坐标系内纵坐标和横坐标皆不大于它的星星的个数.星星的坐标按照纵坐标从小到大的顺序给出,纵坐标相同时 ...

  6. [译]RxJS 5.X基础篇

    欢迎指错与讨论 : ) 当前RxJS版本:5.0.0-beta.10.更详细的内容尽在RxJS官网http://reactivex.io/rxjs/manual/overview.html.文章比较长 ...

  7. 21-Python-Django进阶补充篇

    1. 路由部分补充 1.1 默认值 url: url(r'^index/', views.index, {'name': 'root'}), views: def index(request,name ...

  8. Codeforces Round #383(div 2)

    A.快速幂 B. 题意:求ai^aj=x的数对个数,x和a[]给定 分析:a^b=c,则a^c=b,所以求ai^x=aj的个数,枚举一遍即可 C. 题意:给你一个有向图,每个点的出边只有一条,求最小的 ...

  9. [翻译] Android是怎样绘制视图的

    原文:How Android Draws Views 当一个Activity获取到焦点的时候,它的布局就开始被绘制. 绘制的过程由Android framework处理.但布局层级的根节点必须由Act ...

  10. RabbitMQ操作

    注意:在rabbitmq中,可以存在多个exchange,exchange只是负责接收消息,然后消息必须发送到给queue中,如果没有queue,消息就丢失了,exchange就相当于交换机,不负责存 ...