1. 程式人生 > >Android 程序間通訊

Android 程序間通訊


/**
 * 客戶端控制介面
 */
public class MainActivity extends Activity {

 public static final String TAG = "MainActivity";

 // 服務端 AndroidManifest.xml中的intent-filter action宣告的字串
 public static final String ACTION = "com.example.playerserver.PlayerService";

 private Button playbtn, stopbtn;

 private IRemoteService mService;

 private boolean isBinded = false;

 private ServiceConnection conn = new ServiceConnection() {

  @Override
  public void onServiceDisconnected(ComponentName name) {
   isBinded = false;
   mService = null;
  }

  @Override
  public void onServiceConnected(ComponentName name, IBinder service) {
   mService = IRemoteService.Stub.asInterface(service);
   isBinded = true;
  }
 };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        doBind();
        initViews();
    }
    private void initViews() {
     playbtn = (Button) findViewById(R.id.button1);
        stopbtn = (Button) findViewById(R.id.button2);
        playbtn.setOnClickListener(clickListener);
        stopbtn.setOnClickListener(clickListener);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    @Override
    protected void onDestroy() {
  doUnbind();
     super.onDestroy();
    }
    public void doBind() {
     Intent intent = new Intent(ACTION);
     bindService(intent, conn, Context.BIND_AUTO_CREATE);
    }
    public void doUnbind() {
     if (isBinded) {
      unbindService(conn);
         mService = null;
         isBinded = false;
     }

    }
    private OnClickListener clickListener = new OnClickListener() {

  @Override
  public void onClick(View v) {
   if (v.getId() == playbtn.getId()) {
    // play
    Log.i(TAG,"play button clicked");
    try {
     mService.play();
    } catch (RemoteException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   } else {
    // stop
    Log.i(TAG,"stop button clicked");
    try {
     mService.stop();
    } catch (RemoteException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }
 };
}

相關推薦

android程序通訊--Binder

深入理解之程序間通訊–Binder 同一個程式中的兩個方法能夠直接呼叫的根本原因是處於相同的記憶體空間中。兩個不同的應用程式因為不在同一個程序中,他們是沒有辦法直接通過記憶體地址來訪問到對方的函式和變數的。同一個程序中物件的傳遞是傳遞的記憶體地址,這個地址並不是真正的實體地址,而是邏

Android程序通訊——ContentProvider的使用

前言 ContentProvider作為四大元件之一,一直以來存在感都很低,但其實它的功能還是很強大的,尤其是在實現程序間通訊的時候。和AIDL一樣,ContentProvider的底層實現也是Binder,但是由於系統已經為我們做了封裝,所以它的使用過程要簡單的多。 一、什麼是Conten

Android程序通訊 - 幾種方式的對比總結

什麼是RPC RPC(Remote Procedure Call)即遠端過程呼叫,它是一種通過網路從遠端計算機程式上請求服務,在不需要了解底層網路技術的協議下,即可獲取計算機程序中的資料。RPC使得開發包括網路分散式多程式在內的應用程式更加容易。 RPC在OSI網路通訊7層模型中

Android程序通訊 - Socket使用(TCP、UDP)

在使用Socket實現程序間通訊前,先對網路協議相關知識進行簡單回顧。 網路分層 一般情況會將網路分為5層: 應用層     常見協議:HTTP、FTP、POP3等 傳輸層     

Android程序通訊 - ContentProvider內容提供者

簡介 ContentProvider主要用於在不同的應用程式間實現資料共享的功能,允許一個程式訪問另外一個程式中的資料,還能保證資料訪問的安全性。 是Android跨程序實現資料共享的標準方式。 ContentProvider相當於程序間的搬運工,

Android程序通訊的幾種方式

定義多程序 Android應用中使用多程序只有一個辦法(用NDK的fork來做除外),就是在AndroidManifest.xml中宣告元件時,用android:process屬性來指定。 不知定process屬性,則預設執行在主程序中,主程序名字為包名。 andr

android程序通訊:使用AIDL

  from: http://blog.csdn.net/saintswordsman/article/details/5130947 歡迎閱讀本文,你能關注本文,你知道你需要程序間通訊、需要AIDL(以及Binder),那麼可以預設你對這些概念已經有了一些

android程序通訊AIDL的簡單實現。

aidl程序間通訊,肯定是兩個程序之間了,我們可以簡單的將其分為服務端和客戶端,客戶端負責發起一個求和的請求,服務端則負責執行這個求和的動作並將求和的結果返回給客戶端。 先看看服務端的程式碼建立吧,用的開發工具是AndroidStudio,右鍵新建aidl檔案,程式碼如下

Android 程序通訊(AIDL)

在Android平臺,一個程序通常不能訪問另一個程序的記憶體空間,所以要想對話,需要將物件分解成作業系統可以理解的基本單元,並且有序的通過程序邊界。通過程式碼來實現這個資料傳輸過程是冗長乏味的,Android提供了AIDL工具來處理這項工作。 AIDL (An

Android-Android程序通訊之messenger

轉自‘https://www.cnblogs.com/makaruila/p/4869912.html 平時一說程序間通訊,大家都會想到AIDL,其實messenger和AIDL作用一樣,都可以進行程序間通訊。它是基於訊息的程序間通訊,就像子執行緒和UI執行緒傳送訊息那樣,是不是很簡單,還不用去寫AIDL檔

[心得]Android程序通訊之Broadcast Receiver

Android框架層提供的一些通訊機制Broadcast、Intent、Content Provider,主要用於應用程式開發時提供跨程序或應用程式內部的通訊。 android中,通過廣播(broadcast)可以通知廣播接受者某個事件發生了。比如一些系統時間:電源不足,

Android程序通訊(IPC)之Socket

Socket也被稱為“套接字”程式設計,它分為流式套接字和使用者資料套接字兩種,分別對應於網路傳輸控制中層中TCP和UDP協議。TCP協議是面向連線的協議,提供穩定的雙向通訊功能,TCP連線的建立需要經過”三次握手”才能實現,為了實現穩定的資料傳輸功能,其本身提

Android程序通訊(二)——傳遞複雜資料

上一篇文章中介紹瞭如何在Android不同程序間傳遞資料,但是傳遞的都是基本資料型別或者String型別,這些都是系統資料型別。如何傳遞自定義資料型別呢? 下面我們來舉個栗子。假設我們有兩個自定義的類,一個是Person類,一個是Car類。一個Person

Android程序通訊系列-----------程序的資料傳遞載體Parcel

一、Android中的新的序列化機制         JAVA中的Serialize機制,其作用是能將資料物件存入位元組流當中,在需要時重新生成物件。主要應用是利用外部儲存裝置儲存物件狀態,以及通過網路傳輸物件等。         在Android系統中,定位為針對記憶體

Android 程序通訊

/**  * 客戶端控制介面  */ public class MainActivity extends Activity {  public static final String TAG = "MainActivity";  // 服務端 AndroidManifest.xml中的intent-fil

Android程序通訊之Socket

Socket也稱為“套接字”,是網路通訊中的概念,它分為流式套接字和使用者資料報套接字兩種,分別對應於網路傳輸控制層中的TCP和UDP協議。 TCP協議是面向連線的協議,提供穩定的雙向通訊功能,TCP連線的建立需要經過“三次握手”才能完成,為了提供穩定的資料傳輸功能,其本身

Android 程序通訊四種方式

android系統中應用程式之間不能共享記憶體,在android SDK中提供了4種用於跨程序通訊的方式。這4種方式正好對應於android系統中4種應用程式元件:Activity、Content Provider、Broadcast和Service。 1、A

程序通訊Android 程序通訊的幾種實現方式

一、整體結構 下面將逐一介紹4種通訊方式 二、4種通訊方式 1、Activity Android內建了許多可供其他程式跨程序訪問的Activity,比如跳至打電話頁面(指定Action,uri跨程序訪問) Intent call

android程序通訊Binder(一)

最近在看程序間通訊方面的東西,在這裡粗略的的記錄一下自己看到的東西。 在android中實現程序間通訊用的都是Binder機制,Binder:貼上劑,個人感覺很形象,將各個程序貼上起來,實現程序之間資料的互動,拒絕了程序間的老死不相往來。本來程序就是互斥的,為的就是保持程序

Android程序通訊和執行緒通訊

程序間和執行緒間通訊 這個知識點算是高階知識點, 執行緒和程序 首先要區分執行緒和程序的區別: 執行緒是cup最小排程單元; 程序是一系列執行緒的集合。 其實區分程序和執行緒通訊有一個很好的方法:程式是否重新起了一個虛擬機器,因為不同程序會啟動不