博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
认识Android Service
阅读量:5314 次
发布时间:2019-06-14

本文共 4237 字,大约阅读时间需要 14 分钟。

一、使用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;

    }

 

转载于:https://www.cnblogs.com/MRDS-world/p/6202825.html

你可能感兴趣的文章
日志分析工具 Log Parser
查看>>
18 HTML标签以及属性全
查看>>
tensorflow 前向传播 2019.07.19
查看>>
安装完CentOS 7 Minimal之后,从头打造桌面工作环境
查看>>
利用GDAL实现影像的几何校正
查看>>
不错的iOS相关的主页或站点 (更新于14-06-22)
查看>>
less嵌套规则
查看>>
【转】深入浅出ShellExecute
查看>>
常见ES5方法
查看>>
缓存,队列(Redis,RabbitMQ)
查看>>
破解Java to C# Converter
查看>>
【codeforces 534B】Covered Path
查看>>
给图片添加标签
查看>>
1413确定进制
查看>>
linux 压缩文件的命令总结
查看>>
Mac上Homebrew的使用 (Homebrew 使 OS X 更完整)
查看>>
ProSolid下的遍历访问封装代码
查看>>
添加ASP.NET网站资源文件夹
查看>>
我们是如何通过全球第一免费开源ERP Odoo做到项目100%交付
查看>>
httpModules 与 httpHandlers
查看>>