android studio后台服务使用详解

Cynthia ·
更新时间:2024-11-01
· 525 次阅读

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>



studio Android

需要 登录 后方可回复, 如果你还没有账号请 注册新账号