Service 是 Android 系统的服务组件,适用于开发没有用户界面且长时间在后台运行的功能。通过本次试验了解后台服务的基本原理,掌握本地服务的使用方法。
1、创建一个Service服务用来完成简单的求和和比较大小的数学运算。
2、创建Activity并调用该数学Service
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第一个数:"> </TextView> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" android:id="@+id/firstnum" android:inputType="number" android:digits="1234567890."> </EditText> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第二个数"/> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" android:id="@+id/second" android:inputType="number" android:digits="1234567890."/> </LinearLayout> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/bind" android:text="绑定"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/add" android:text="求和"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/compare" android:text="比较大小"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/unbind" android:text="解除绑定"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/out"/> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
MathService.java
package com.example.serviceexperiment; import android.app.Service; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.Binder; import android.os.IBinder; import android.widget.Toast; public class MathService extends Service { //服务绑定 final IBinder mBinder=new LocalBinder(); public class LocalBinder extends Binder { MathService getService() { return MathService.this; } } public MathService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. return mBinder; } public boolean onUnbind(Intent intent){ Toast.makeText(this,"取消本地绑定",Toast.LENGTH_SHORT).show(); return false; } public Double Add(Double a,Double b){ return a+b; } public boolean Compare(Double a,Double b){ if(a>b){ return true; }; return false; } }
MainActicity.java
package com.example.serviceexperiment; import androidx.appcompat.app.AppCompatActivity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.text.Editable; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private MathService mathService; private boolean isBound=false; TextView labelView; EditText firstnum; EditText secondnum; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); labelView=(TextView)findViewById(R.id.out); labelView.setText("两个数默认值都为0"); firstnum=(EditText)findViewById(R.id.firstnum); secondnum=(EditText)findViewById(R.id.second); Button bindButton=(Button)findViewById(R.id.bind); Button unbindButton=(Button)findViewById(R.id.unbind); Button addButton=(Button)findViewById(R.id.add); Button compareButton=(Button)findViewById(R.id.compare); bindButton.setOnClickListener(new View.OnClickListener() {//绑定按钮 @Override public void onClick(View view) { if(!isBound){ final Intent serviceIntent=new Intent(MainActivity.this,MathService.class); bindService(serviceIntent,mConnection,Context.BIND_AUTO_CREATE); isBound=true; Toast.makeText(MainActivity.this,"本地绑定:MathService",Toast.LENGTH_SHORT).show(); } } }); unbindButton.setOnClickListener(new View.OnClickListener() {//解绑按钮 @Override public void onClick(View view) { if(isBound){ isBound=false; unbindService(mConnection); mathService=null; Toast.makeText(MainActivity.this,"取消本地绑定:MathService",Toast.LENGTH_SHORT).show(); } } }); addButton.setOnClickListener(new View.OnClickListener() {//调用服务加法 @Override public void onClick(View view) { if(mathService==null){ Toast.makeText(MainActivity.this,"未绑定服务:MathService",Toast.LENGTH_SHORT).show(); return; } String firsttext=firstnum.getText().toString(); Double a= 0.0; if(firsttext.length()!=0){ a=Double.parseDouble(firsttext); } String secondtext=secondnum.getText().toString(); Double b= 0.0; if(secondtext.length()!=0){ b=Double.parseDouble(secondtext); } Double result=mathService.Add(a,b); String msg=String.valueOf(a)+"+"+String.valueOf(b)+"="+String.valueOf(result); labelView.setText(msg); } }); compareButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(mathService==null){ Toast.makeText(MainActivity.this,"未绑定服务:MathService",Toast.LENGTH_SHORT).show(); return; } String firsttext=firstnum.getText().toString(); Double a= 0.0; if(firsttext.length()!=0){ a=Double.parseDouble(firsttext); } String secondtext=secondnum.getText().toString(); Double b= 0.0; if(secondtext.length()!=0){ b=Double.parseDouble(secondtext); } boolean result=mathService.Compare(a,b); String msg; if(result){ msg=String.valueOf(a)+"和"+String.valueOf(b)+"中最大的数是"+String.valueOf(a); }else{ msg=String.valueOf(a)+"和"+String.valueOf(b)+"中最大的数是"+String.valueOf(b); } labelView.setText(msg); } }); } private ServiceConnection mConnection=new ServiceConnection() {//绑定 @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { mathService=((MathService.LocalBinder)iBinder).getService(); } @Override public void onServiceDisconnected(ComponentName componentName) { mathService=null; } }; }
AndroidMainfest.xml中加入
<service android:name=".MathService" android:enabled="true" android:exported="true"></service>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。