Android服务实例

时间:2020-02-23 14:29:16  来源:igfitidea点击:

本教程介绍了Android中的服务及其生命周期,并给出了如何创建服务的示例。

Android服务与Android活动的概念截然不同。这是Android应用程序开发的概念。让我们讨论一下。

Android服务

服务用于实现或者执行应用程序中运行的后台操作。它是一个应用程序组件,用于执行长时间运行的重要后台任务,如播放音乐、下载文件或者执行网络事务。因为服务在后台运行,所以它不像活动那样有任何用户界面。它允许我们在应用程序中实现多任务处理。服务在后台继续运行,尽管应用程序已关闭或者服务已完成其作业或者显式停止。所以它比非活动应用程序具有更高的优先级。我们也可以将其设置为与正在运行的前台任务相同的优先级。我们来讨论一下服务的类型。

Android服务类型

Android有三种不同类型的服务。

Scheduled:一个服务在像jobScheduler这样的API中被调度,然后称为Scheduled service。系统检查jobScheduler并在适当的时间执行服务。

已启动:如果应用组件可以启动某个服务,则称之为已启动服务。活动调用startService()方法,然后在后台运行。通常此服务执行单个操作。

绑定:如果应用组件将服务绑定到bindService(),则称为绑定。它有一个客户机-服务器接口,允许组件与服务交互。

Android服务生命周期

Android服务生命周期与Android活动完全不同。如果使用startService()创建服务或者使用bindService()创建服务,则其生命周期可能不同。以下两个生命周期都显示在下面。

服务生命周期

让我们讨论一下服务生命周期的回调方法。当使用startService()创建服务时,将调用OnStartCommand()方法。执行此方法后在后台运行的服务星。如果使用此方法创建服务,请通过调用stopSelf()或者stopService()方法停止它。如果服务是有界的,则使用OnBound()方法。其他组件使用此方法将自己与服务绑定。OnCreate()方法用于创建服务。方法用于销毁服务。

Android服务实例

下面是Android Studio中的一个服务示例。打开IDE并创建新项目。创建activity并将其命名为activity_main,下面是activty_main.xml的代码

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout android:layout_width="368dp"
  android:layout_height="495dp"
  xmlns:tools="http://schemas.android.com/tools"
  tools:layout_editor_absoluteX="8dp"
  tools:layout_editor_absoluteY="8dp"
  xmlns:android="http://schemas.android.com/apk/res/android">

      <Button
          android:id="@+id/buttonStart"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentTop="true"
          android:layout_centerHorizontal="true"
          android:layout_marginTop="122dp"
          android:text="Button"
          tools:text="Start Service" 

      <Button
          android:id="@+id/buttonStop"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignLeft="@+id/buttonStart"
          android:layout_alignStart="@+id/buttonStart"
          android:layout_below="@+id/buttonStart"
          android:layout_marginTop="36dp"
          android:text="Button"
          tools:text="Stop Service" 

      <Button
          android:id="@+id/buttonNext"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginTop="44dp"
          android:text="Button"
          tools:text="Next"
          android:layout_below="@+id/buttonStop"
          android:layout_centerHorizontal="true" 

  <TextView
      android:id="@+id/textView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="47dp"
      android:text="TextView"
      android:textColorLink="@android:color/black"
      android:textSize="24sp"
      tools:text="theitroad.local" 
</RelativeLayout>

MainActivity.java

package com.example.admin.androidservice;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity implements View.OnClickListener {

  Button buttonStart, buttonStop,buttonNext;
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      buttonStart = (Button) findViewById(R.id.buttonStart);
      buttonStop = (Button) findViewById(R.id.buttonStop);
      buttonNext = (Button) findViewById(R.id.buttonNext);

      buttonStart.setOnClickListener(this);
      buttonStop.setOnClickListener(this);
      buttonNext.setOnClickListener(this);
  }
  public void onClick(View src) {
      switch (src.getId()) {
          case R.id.buttonStart:
              startService(new Intent(this, SecondActivity.class));
              break;
          case R.id.buttonStop:
              stopService(new Intent(this, SecondActivity.class));
              break;
          case R.id.buttonNext:
              Intent intent=new Intent(this,SecondActivity.class);
              startActivity(intent);
              break;
      }
  }
}

为另一个屏幕创建另一个活动并将其命名为second。

activity_second.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout android:layout_width="368dp"
  android:layout_height="495dp"
  xmlns:tools="http://schemas.android.com/tools"
  tools:layout_editor_absoluteX="8dp"
  tools:layout_editor_absoluteY="8dp"
  xmlns:android="http://schemas.android.com/apk/res/android">

  <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"
      android:layout_alignParentTop="true"
      android:layout_marginLeft="96dp"
      android:layout_marginTop="112dp"
      android:text="Next Page" 

</RelativeLayout>

secondActivity.java

package com.example.admin.androidservice;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class SecondActivity extends AppCompatActivity {

      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_second);
      }

}

运行并测试它