原文: https://javatutorial.net/android-service-example

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

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

Android 服务

服务用于实现或执行在我们的应用中运行的后台操作。 它是一个应用程序组件,用于执行长时间运行的重要后台任务,例如播放音乐,下载文件或执行网络事务。 由于服务在后台运行,因此与活动不同,它没有任何用户界面。 它使我们能够在应用程序中启用多任务处理。 尽管应用程序已关闭或服务已完成工作或已明确停止,但服务仍在后台继续运行。 因此,它比不活动的应用程序具有更高的优先级。 您还可以将其设置为与正在运行的前台任务相同的优先级。 让我们讨论一下服务类型。

Android 服务的类型

Android 中提供三种不同类型的服务。

调度:在诸如jobScheduler之类的 API 中计划了一项服务,然后将其称为计划服务。 系统检查jobScheduler并在适当的时间执行服务。

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

绑定:如果应用程序组件将服务绑定到bindService(),则称为绑定。 它具有一个客户端服务器接口,该接口允许组件与服务进行交互。

Android 服务的生命周期

Android 服务生命周期与 Android 活动完全不同。 如果使用startService()创建服务或使用bindService()创建服务,则其生命周期可能会有所不同。 下图显示了两个生命周期。

Android 服务示例 - 图1

服务生命周期

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

Android 中的服务示例

这是 Android Studio 中的服务示例。 打开您的 IDE 并创建一个新项目。 创建活动并将其命名为actvity_main,这是activty_main.xml的代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout android:layout_width="368dp"
  3. android:layout_height="495dp"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. tools:layout_editor_absoluteX="8dp"
  6. tools:layout_editor_absoluteY="8dp"
  7. xmlns:android="http://schemas.android.com/apk/res/android">
  8. <Button
  9. android:id="@+id/buttonStart"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:layout_alignParentTop="true"
  13. android:layout_centerHorizontal="true"
  14. android:layout_marginTop="122dp"
  15. android:text="Button"
  16. tools:text="Start Service" />
  17. <Button
  18. android:id="@+id/buttonStop"
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:layout_alignLeft="@+id/buttonStart"
  22. android:layout_alignStart="@+id/buttonStart"
  23. android:layout_below="@+id/buttonStart"
  24. android:layout_marginTop="36dp"
  25. android:text="Button"
  26. tools:text="Stop Service" />
  27. <Button
  28. android:id="@+id/buttonNext"
  29. android:layout_width="wrap_content"
  30. android:layout_height="wrap_content"
  31. android:layout_marginTop="44dp"
  32. android:text="Button"
  33. tools:text="Next"
  34. android:layout_below="@+id/buttonStop"
  35. android:layout_centerHorizontal="true" />
  36. <TextView
  37. android:id="@+id/textView"
  38. android:layout_width="wrap_content"
  39. android:layout_height="wrap_content"
  40. android:layout_alignParentTop="true"
  41. android:layout_centerHorizontal="true"
  42. android:layout_marginTop="47dp"
  43. android:text="TextView"
  44. android:textColorLink="@android:color/black"
  45. android:textSize="24sp"
  46. tools:text="javaTutorial.net" />
  47. </RelativeLayout>

这是MainActivity.java的代码

  1. package com.example.admin.androidservice;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.Button;
  8. public class MainActivity extends Activity implements View.OnClickListener {
  9. Button buttonStart, buttonStop,buttonNext;
  10. @Override
  11. public void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14. buttonStart = (Button) findViewById(R.id.buttonStart);
  15. buttonStop = (Button) findViewById(R.id.buttonStop);
  16. buttonNext = (Button) findViewById(R.id.buttonNext);
  17. buttonStart.setOnClickListener(this);
  18. buttonStop.setOnClickListener(this);
  19. buttonNext.setOnClickListener(this);
  20. }
  21. public void onClick(View src) {
  22. switch (src.getId()) {
  23. case R.id.buttonStart:
  24. startService(new Intent(this, SecondActivity.class));
  25. break;
  26. case R.id.buttonStop:
  27. stopService(new Intent(this, SecondActivity.class));
  28. break;
  29. case R.id.buttonNext:
  30. Intent intent=new Intent(this,SecondActivity.class);
  31. startActivity(intent);
  32. break;
  33. }
  34. }
  35. }

为另一个屏幕创建另一个活动,然后为其命名。 打开activity_second.xml并粘贴以下代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout android:layout_width="368dp"
  3. android:layout_height="495dp"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. tools:layout_editor_absoluteX="8dp"
  6. tools:layout_editor_absoluteY="8dp"
  7. xmlns:android="http://schemas.android.com/apk/res/android">
  8. <TextView
  9. android:id="@+id/textView1"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:layout_alignParentLeft="true"
  13. android:layout_alignParentTop="true"
  14. android:layout_marginLeft="96dp"
  15. android:layout_marginTop="112dp"
  16. android:text="Next Page" />
  17. </RelativeLayout>

这是secondActivity.java的代码

  1. package com.example.admin.androidservice;
  2. import android.support.v7.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. public class SecondActivity extends AppCompatActivity {
  5. @Override
  6. public void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_second);
  9. }
  10. }

运行并测试它,这是此代码的输出

Android 服务示例 - 图2

android 服务

Android 服务示例 - 图3

服务

您可以从此链接下载代码。