Android基礎及應用 Service的使用
一、實驗目的
1. 瞭解Service的原理和用途;
2. 掌握本地服務的管理方法;
3. 掌握遠端服務的繫結和呼叫方法。
二、實驗過程
1、實現本地程式服務
在圖1.1的介面上新增“計算”按鈕。在介面上輸入姓名、身高和體重資料後,點選“計算”按鈕後呼叫本地服務來計算BMI指數,然後根據計算得出的BMI指數,給出對應的提示資訊。
(1)新建一個繼承Service類的MyService,在類中過載onBind()方法,並在onBind()中返回MyService的例項:
public class MyService extends Service {
private final IBinder mBinder = new LocalBinder();
public class LocalBinder extends Binder{
MyService getService(){
return MyService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
}
(2)在MyService中新增一個計算BMI指數的方法:
public String gettizhi(double h,double w) {
String tizhi = null;
double bmi = w/((h/100)*(h/100));
if(bmi<18.5){
tizhi="體重偏瘦";
}
else if(bmi>=18.5&&bmi<24){
tizhi="體重正常";
}
else if(bmi>=24&&bmi<28){
tizhi="體重偏胖";
}
else if(bmi>=28){
tizhi="體重肥胖";
}
return tizhi;
}
(3)因為如果在計算按鈕中啟動服務需要點選兩次才能獲取返回資訊,所以直接在MainActivity的oncreate()中啟動服務,在計算按鈕中獲取返回資訊,在MainActivity中新增如下程式碼:
private MyService myservice;
String result;
Button b3 = (Button) findViewById(R.id.button3);
Intent serviceintent = new Intent(MainActivity.this,MyService.class);
bindService(serviceintent, mConnection, Context.BIND_AUTO_CREATE);
b3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
result = myservice.gettizhi(Double.valueOf(e3.getText().toString()),Double.valueOf(e2.getText().toString()));
Toast.makeText(getApplicationContext(), e1.getText().toString()+result, Toast.LENGTH_LONG).show();
}
});
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
myservice = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myservice = ((MyService.LocalBinder)service).getService();
}
};
(4)在AndroidManifest.xml中註冊MyService
(5)效果如圖3.1所示:
圖3.1 “計算”按鈕
在圖2.1的資訊顯示介面中新增一項“體質”,根據計算得出的BMI指數給出相應的體質狀況。
在onContextItemSelected()中的檢視按鈕點選事件中新增:intent.putExtra("tizhi", result);
效果如下圖3.2所示:
圖3.2 新增“體質”項
2、實現跨程式服務
建立遠端服務,利用遠端服務實現與步驟2同樣的功能。
(1) 新建專案RemoteMyService
(2) 使用IMyService.aidl定義遠端服務的介面
package edu.cczu.remotemyservice;
interface IMyService{
String gettizhi(double h,double w);
}
(3) 通過繼承Service類的MyServiceSecond類實現遠端服務
public class MyServiceSecond extends Service {
private final IMyService.Stub mBinder = new IMyService.Stub(){
@Override
public String gettizhi(double h, double w) throws RemoteException {
String tizhi = null;
double bmi = w/((h/100)*(h/100));
if(bmi<18.5){
tizhi="體重偏瘦";
}
else if(bmi>=18.5&&bmi<24){
tizhi="體重正常";
}
else if(bmi>=24&&bmi<28){
tizhi="體重偏胖";
}
else if(bmi>=28){
tizhi="體重肥胖";
}
return tizhi;
}
};
@Override
public IBinder onBind(Intent intent) {
Toast.makeText(this, "遠端繫結", Toast.LENGTH_SHORT).show();
return mBinder;
}
}
(4) 編譯,上傳到模擬器中
(5) 在edu.cczu.myandroid中引入相同的AIDL檔案
(6) 繫結和使用遠端服務
與本地服務相比需要改變的地方:
1. 使用IMyService宣告遠端服務例項:
private IMyService imyservice;
2通過IMyService.Stub的asInterface()方法實現獲取伺服器例項:
imyservice = IMyService.Stub.asInterface(service);
3.先通過setAction()方法宣告服務標識,然後呼叫bindService()繫結服務:
final Intent serviceintent = new Intent();
serviceintent.setAction("edu.cczu.remotemyservice.MyServiceSecond");
serviceintent.setPackage(getPackageName());
bindService(serviceintent,mConnection,Context.BIND_AUTO_CREATE);
效果如入3.3所示:
圖3.3 遠端服務
相關文章
- Android基礎及應用 Intent的呼叫AndroidIntent
- Android基礎及應用 介面設計Android
- .NET 基礎拾遺(7):Web Service 的開發與應用基礎Web
- Android應用基礎知識Android
- Python基礎語法及應用Python
- NeurophStudio安裝及基礎應用
- Android中bindService的使用及Service生命週期Android
- Android中startService的使用及Service生命週期Android
- Web Service 基礎Web
- Android知識點回顧之Service基礎Android
- Android基礎知識:Service(3)啟動模式Android模式
- Service Worker的應用
- nginx的基礎應用(續)Nginx
- shell基礎應用
- Sentinel基礎應用
- echarts基礎應用Echarts
- flash基礎應用
- Android 應用內多程式的使用及注意事項Android
- Android基礎 你必須瞭解的應用檔案目錄Android
- Android應用及應用管理簡介Android
- Linux基礎命令---serviceLinux
- Windows應用程式基礎Windows
- Ubuntu Server 基礎應用UbuntuServer
- python基礎應用Python
- [Android基礎]WebView的簡單使用AndroidWebView
- Android基礎-Activity基本使用Android
- Android Protobuf應用及原理Android
- maven簡介及基礎使用Maven
- 移動測試基礎 Android 應用測試總結Android
- Android基礎與應用 資料儲存與訪問Android
- TS基礎應用 & Hook中的TSHook
- Android中Service的啟動方式及Activity與Service的通訊方式Android
- 應用基礎框架全面解析框架
- Linux應用——程序基礎Linux
- Android應用程式目錄定義及使用方法Android
- 大模型基礎應用框架(ReACTSFTRAG)技術創新及零售業務落地應用大模型框架React
- MyCat資料庫的基礎配置及使用資料庫
- Android 之Service使用攻略Android