一、使用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. Java 加解密技术系列文章

    Java 加解密技术系列之 总结 Java 加解密技术系列之 DH Java 加解密技术系列之 RSA Java 加解密技术系列之 PBE Java 加解密技术系列之 AES Java 加解密技术系列 ...

  2. Ural 1225. Flags 斐波那契DP

    1225. Flags Time limit: 1.0 secondMemory limit: 64 MB On the Day of the Flag of Russia a shop-owner ...

  3. JAVA中使用FTPClient实现文件上传下载实例代码

    一.上传文件 原理就不介绍了,大家直接看代码吧 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

  4. [LeetCode] Count The Repetitions 计数重复个数

    Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...

  5. [LeetCode] Can I Win 我能赢吗

    In the "100 game," two players take turns adding, to a running total, any integer from 1.. ...

  6. MongoDB的备份和恢复

    1.导出数据库/备份: @echo off F: cd F:\software1\mongdb\mongodb-win32-x86_64-\bin start mongodump.exe -h -d ...

  7. 下拉框-ComboBox

    <ComboBox Name="cbBox" SelectionChanged="cbBox_SelectionChanged"></Comb ...

  8. 【转】Tomcat启用HTTPS协议配置过程

    转载请注明出处: http://blog.csdn.net/gane_cheng/article/details/53001846 http://www.ganecheng.tech/blog/530 ...

  9. ssh 登录慢?

    修改 /etc/ssh/sshd_config 文件中对应的配置为: GSSAPIAuthentication no UseDNS=no 修改 /etc/nsswitch.conf 文件中对应的配置为 ...

  10. 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法

    原因1:给定目录下jvm.dll不存在. 对策:(1)重新安装jre或者jdk并配置好环境变量.(2)copy一个jvm.dll放在该目录下. 原因2:eclipse的版本与jre或者jdk版本不一致 ...