Android服务实例
本教程介绍了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);
}
}
运行并测试它

