使用Messenger實現(xiàn)Service的雙向通信
更新時間:2021年05月21日 10:21:00 作者:antimage08
這篇文章主要為大家詳細介紹了使用Messenger實現(xiàn)Service的雙向通信,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
Android體系架構中有一個解決方案:利用Android Messenger實現(xiàn)Service進程間雙向通信。
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();
}
});
}
// 用于啟動 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>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關文章
完美解決Android Studio集成crashlytics后無法編譯的問題
下面小編就為大家?guī)硪黄昝澜鉀QAndroid Studio集成crashlytics后無法編譯的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
Android開發(fā)之基于DialogFragment創(chuàng)建對話框的方法示例
這篇文章主要介紹了Android開發(fā)之基于DialogFragment創(chuàng)建對話框的方法,結合實例形式分析了DialogFragment創(chuàng)建對話框的具體功能與布局相關實現(xiàn)技巧,需要的朋友可以參考下2017-08-08

