使用Messenger實(shí)現(xiàn)Service的雙向通信
Android體系架構(gòu)中有一個(gè)解決方案:利用Android Messenger實(shí)現(xiàn)Service進(jìn)程間雙向通信。
MainActivity 類:
package com.example.messengeservicetest;
import android.app.Activity;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.text.style.IconMarginSpan;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Messenger sender;
private ServiceConnection conn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bind = (Button)findViewById(R.id.bind);
Button start = (Button)findViewById(R.id.start);
Button send = (Button)findViewById(R.id.send);
bind.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getStart();
}
});
start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MessengerService.class);
startService(intent);
}
});
send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sendCount();
}
});
}
// 用于啟動(dòng) MessengerService
private void getStart(){
conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
sender = new Messenger(service);
}
};
Intent intent = new Intent(this, MessengerService.class);
// startService(intent);
bindService(intent, conn, Service.BIND_AUTO_CREATE);
}
// 傳遞數(shù)值
private void sendCount(){
Message msg = new Message();
msg.arg1 = 20;
msg.arg2 = 20;
try {
sender.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(conn);
}
}
MessengerService.java 類:
package com.example.messengeservicetest;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.util.Log;
public class MessengerService extends Service {
Messenger messenger;
Handler handler;
int a, b;
int sum = 0;
@Override
public IBinder onBind(Intent intent) {
return messenger.getBinder();
}
@Override
public void onCreate() {
super.onCreate();
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
a = msg.arg1;
b = msg.arg2;
}
};
messenger = new Messenger(handler);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int sum = subSum(a, b);
System.out.println(sum + "");
return super.onStartCommand(intent, flags, startId);
}
private int subSum(int a, int b){
int sum = a + b;
return sum;
}
}
在 AndroidManifest.xml 中注冊:
<service android:name=".MessengerService"></service>
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于Android實(shí)現(xiàn)一個(gè)簡易音樂播放器
在Android平臺(tái)上開發(fā)一個(gè)音樂播放器是一項(xiàng)常見的任務(wù),這涉及到對(duì)音頻文件的處理、用戶界面設(shè)計(jì)以及多媒體框架的運(yùn)用,本項(xiàng)目基于樣例代碼進(jìn)行擴(kuò)展,雖然功能相對(duì)簡單,但包含了Android音樂播放器開發(fā)的核心知識(shí)點(diǎn),需要的朋友可以參考下2024-08-08
Android 實(shí)現(xiàn)界面刷新的幾種方法
這篇文章主要介紹了Android 實(shí)現(xiàn)界面刷新的相關(guān)資料,這里提供了幾種方法及實(shí)例代碼,具有一定的參考價(jià)值,需要的朋友可以參考下2016-11-11
Android實(shí)現(xiàn)跑馬燈效果的代碼詳解
Android中實(shí)現(xiàn)跑馬燈效果有多種方式,本文給大家介紹了Android實(shí)現(xiàn)跑馬燈效果的簡單示例,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,感興趣的朋友可以參考下2018-05-05
完美解決Android Studio集成crashlytics后無法編譯的問題
下面小編就為大家?guī)硪黄昝澜鉀QAndroid Studio集成crashlytics后無法編譯的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
Android自定義驗(yàn)證碼輸入框的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Android自定義驗(yàn)證碼輸入框的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-02-02
Android多線程斷點(diǎn)續(xù)傳下載示例詳解
這篇文章主要為大家詳細(xì)介紹了Android多線程斷點(diǎn)續(xù)傳下載示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
Android開發(fā)之基于DialogFragment創(chuàng)建對(duì)話框的方法示例
這篇文章主要介紹了Android開發(fā)之基于DialogFragment創(chuàng)建對(duì)話框的方法,結(jié)合實(shí)例形式分析了DialogFragment創(chuàng)建對(duì)話框的具體功能與布局相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-08-08

