Android的Activity和Service的三種數據交互方式,第一種:同一app(進程)內的

使用IBinder做爲交互媒介

方法概述

Activity端使用bindService的方式來綁定須要交互的Service,經過Service裏面的bind方法來返回IBinder,進而返回Service的實例到Activity,Activity裏面使用ServiceConnection類裏面的回調方法來接收IBinder,並轉換成Service實例。ide

  1. Service代碼示例
public class MyService extends Service {
	public LocalBinder mBinder = new LocalBinder();

    public class LocalBinder extends Binder {
        MyService getMyService() {
            return MyService.this;
        }
    }
	@Override
    public IBinder onBind(Intent intent) {
        Log.i("MyService", "service is binded");
        return mBinder;
    }

	public void showTestLog(String logInfo) {
        Log.i("MyService", logInfo);
    }
}
  1. Activity代碼示例
public class MainActivity extends Activity {
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
	}
	MyService service;
    private ServiceConnection serviceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            MyService.LocalBinder binder = (MyService.LocalBinder) iBinder;
            service = binder.getMyService();
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            service = null;
        }
    };

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("MyActivity", "activity start bind service");
        Intent it = new Intent(MainActivity.this, MyService.class);
        bindService(it, serviceConnection, Context.BIND_AUTO_CREATE);
    }

    @Override
    protected void onStop() {
        super.onStop();
        unbindService(serviceConnection);
    }

	// 執行這個方法,會在logcat看到 'i am mainactivity' 的消息輸出,這樣就能夠調用MyService裏面的方法了
    public void testBindService(View v){
        if (service != null) {
            service.showTestLog("i am mainactivity");
        }else {
            Log.e("MyActivity", "service is not bind");
        }
    }
}

本人技術有限,初學IPC,有錯誤請指正,謝謝!this

相關文章
相關標籤/搜索