Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中的跨進程回調

Android中的跨進程回調

編輯:關於Android編程

[java]     在Android應用程序開發中,可能會遇到跨進程回調問題,比如,調用一個服務,但服務是異步的,服務完成後,需要給客戶一個通知,這時就需要用到跨進程回調了。跨進程回調本質上用到了Binder機制,其過程如下: 1.定義aidl ITest.aidl [plain]  package com.example.chirpdemo;   import com.example.chirpdemo.ITestListener;      interface ITest {   int getValue();   void setValue(int value);   void listen(ITestListener listener);   }   ITestListener.aidl [plain]   www.2cto.com package com.example.chirpdemo;      interface ITestListener {   void onFinished(int result);   }   2.Service定義如下: [java]   package com.example.chirpdemo;      import android.app.Service;   import android.content.Intent;   import android.os.IBinder;   import android.os.RemoteException;   import android.util.Log;      public class MyService extends Service {       final private static String TAG = "MyService";          public class ServiceImpl extends ITest.Stub {           private int mValue;           private ITestListener mListener;              public ServiceImpl() {               mValue = 0;           }              @Override           public int getValue() throws RemoteException {               return mValue;           }              @Override           public void setValue(int value) throws RemoteException {               mValue = value;                  if (null != mListener) {                   mListener.onFinished(-1);               }           }              @Override           public void listen(ITestListener listener) throws RemoteException {               mListener = listener;           }       }          @Override       public void onCreate() {           Log.d(TAG, "onCreate");           super.onCreate();       }          @Override       public void onDestroy() {           Log.d(TAG, "onDestroy");           super.onDestroy();       }          @Override       public void onStart(Intent intent, int startId) {           Log.d(TAG, "onStart");           super.onStart(intent, startId);       }          @Override       public int onStartCommand(Intent intent, int flags, int startId) {           Log.d(TAG, "onStartCommand");           return super.onStartCommand(intent, flags, startId);       }          @Override       public boolean onUnbind(Intent intent) {           Log.d(TAG, "onUnbind");           return super.onUnbind(intent);       }          @Override       public void onRebind(Intent intent) {           Log.d(TAG, "onRebind");           super.onRebind(intent);       }          @Override       public IBinder onBind(Intent arg0) {           return new ServiceImpl();       }      }     3.Client定義如下: [java]   package com.example.easytabdemo;      import android.app.Activity;   import android.content.ComponentName;   import android.content.Context;   import android.content.Intent;   import android.content.ServiceConnection;   import android.graphics.PixelFormat;   import android.graphics.drawable.Drawable;   import android.os.Bundle;   import android.os.IBinder;   import android.os.RemoteException;   import android.util.Log;   import android.view.View;   import android.view.View.OnClickListener;   import android.view.ViewGroup;   import android.widget.Button;   import android.widget.EditText;   import android.widget.TextView;      import com.example.chirpdemo.ITest;   import com.example.chirpdemo.ITestListener;   import com.example.easytabdemo.SlideTabHost.TabSpec;      public class MainActivity extends Activity {       final private static String TAG = "MainActivity";                  final Intent myIntent = new Intent("com.pyk.les.IlongExistService");       private boolean startedService = false;       private ITest leservice = null;       ServiceConnection myServiceConnection = new ServiceConnection() {           @Override           public void onServiceConnected(ComponentName name, IBinder service) {               leservice = ITest.Stub.asInterface(service);                              try {                   leservice.listen(new ITestListener.Stub() {                          @Override                       public void onFinished(int result) throws RemoteException {                       }                                          });               } catch (RemoteException e) {                   // TODO Auto-generated catch block                   e.printStackTrace();               }              }              @Override           public void onServiceDisconnected(ComponentName name) {               leservice = null;               Log.i("aaaaaaaaaaaa", "onDisconnected:" + Thread.currentThread());           }       };          @Override       protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           setContentView(R.layout.activity_main);              startedService = bindService(new Intent("com.my.IService"),                   myServiceConnection, BIND_AUTO_CREATE);           Log.i("aaaaaaaaaaaa", "bindService:" + Thread.currentThread());                      Button bt = (Button)this.findViewById(R.id.bt1);           bt.setOnClickListener(new OnClickListener() {                  @Override               public void onClick(View arg0) {                   if ( startedService ) {                       if ( null != leservice ) {                           try {                               leservice.setValue(leservice.getValue() + 1);                           } catch (RemoteException e) {                               e.printStackTrace();                           }                       }                   }               }           });                      view.setOnClickListener(new OnClickListener() {                  @Override               public void onClick(View arg0) {                   if ( startedService ) {                       if ( null != leservice ) {                           try {                               mEditText.setText(leservice.getValue() + "");                           } catch (RemoteException e) {                               e.printStackTrace();                           }                       }                   }               }           });       }          @Override       public void onStart() {           super.onStart();           Log.i("aaaaaaaa", "onStart");       }          @Override       public void onPause() {           super.onPause();           Log.i("aaaaaaaa", "onPause");       }          @Override       public void onResume() {           super.onResume();           Log.i("aaaaaaaa", "onResume");       }   www.2cto.com        @Override       public void onStop() {           super.onStop();           Log.i("aaaaaaaa", "onStop");       }          @Override       protected void onDestroy() {           if (startedService) {               unbindService(myServiceConnection);           }           Log.i(TAG, "onDestroy");           super.onDestroy();       }   }    
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved