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); } }
运行并测试它